牛客刷题——两数之和

题目:

给出一个整数数组,请在数组中找出两个加起来等于目标值的数,

你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的

假设给出的数组中只存在唯一解

例如:

给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2

 原题中给了“哈希”这个关键词的提示,不然我可能还是会傻傻的进行遍历....

先使用哈希将数组重新存储一遍,key为值,value为数组的index,然后对数组进行遍历,拿到当前值 now 之后去判断 ( target - now ) 是不是在哈希map中,是的话,那两个数的index作为返回结果,不是的话当前数不符合需求,去判断下一个数。

完整代码如下:

 public int[] twoSum (int[] numbers, int target) {
	        // write code here
		 int[] res = new int[2];
		 Map<Integer, Integer> numsMap = new HashMap<>();
		 for(int i=0;i<numbers.length;i++) {
			 numsMap.put(numbers[i], i);
		 }
		 for(int i=0;i<numbers.length;i++) {
			 if(numbers[i]>target) {
				 continue;
			 }
			 int now = numbers[i];
			 int obj = target-now;
			 
			 if(numsMap.get(obj)!=null&&i<numsMap.get(obj)) {
				 res[0] = i+1;
				 res[1] = numsMap.get(obj)+1;
				 break;
			 }
		 }
		 return res;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值