【Leetcode】two sum JAVA

来源:互联网 发布:淘宝能买到恐怖水琴吗 编辑:程序博客网 时间:2024/05/29 16:34

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里elsemap.put(numbers[i],i+1);}return result;}}


0 0
原创粉丝点击