【Leetcode】two sum JAVA

Given an array of integers, find two numbers such that they add up to a specific target number.

The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.

You may assume that each input would have exactly one solution.

Input: numbers={2, 7, 11, 15}, target=9

Output: index1=1, index2=2

这道题是说,给你一组数,看能不能选择其中两个数相加达到target的数字(我第一次读的时候没读懂,是不是特别二……)。然后最关键的是要返回的不是这两个数字的值,而是他们的index+1!也就是第几个。而且好处是,只有一组这样的数,而且必须index1>index2

这种问题果断用hashmap啊!!一看到这种key value对应的,要往集合那里去想~

整体思路:

0.既然index要分大小,咱先sort

1.遍历每一个数字,定住一个找另一个

2.定住一个的时候,往map的pool里面找有没有contains,有就返回这两个数字(想想返回顺序谁大?)

4.如果没有,就往pool里放,没准与你match的那个数在后面

public class twosum {
	public static void main(String args[]){
		int[] a={1,23,5,2};
		int aim=3;
		twosum ts = new twosum();
		int n=ts.twoSum(a,aim).length;
		for(int i=0;i<n;i++)
		System.out.println(ts.twoSum(a,aim)[i]);
	}
	
	public int[] twoSum(int[] numbers, int target) {
		int result[] = new int[2];
		HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
		for(int i=0;i< numbers.length;i++){
			//如果现有的map pool里面已经有了
			if(map.containsKey(target-numbers[i])){
				result[0]=map.get(target-numbers[i]);
				result[1]=i+1;
				break;
			}
			//如果没有,放进map的pool里
			else	map.put(numbers[i],i+1);
		}
		return result;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值