开始写LeetCode系列了,会从第1个题开始写下去,暂时只写Algorithm部分的题。
嗯,都是我亲自写的。
先来读下题。这题让你找出一个数组中哪两个数字的和等于target,返回两数下标。返回的下标中第一个下标小于第二个下标。题目保证有解。
看到这个题目首先想到的那必须是O(n^2)的算法,Brute force当然是不能接受的。我们需要一个O(n)的算法。题目的tag里也有提示,可以用哈希表~剩下的问题就简单啦,只要遍历一遍数组就可以了。
直接上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import java.util.Hashtable; public class Solution { public int[] twoSum(int[] numbers, int target) { int[] ans = new int[2]; Hashtable<Integer, Integer> ht = new Hashtable<Integer, Integer>(); for(int i = 0; i < numbers.length; i++){ Integer tmp = ht.get(target-numbers[i]); if(tmp != null){ ans[0] = tmp>i?i+1:tmp+1; ans[1] = tmp>i?tmp+1:i+1; return ans; } Integer n = ht.get(numbers[i]); if(n == null) ht.put(numbers[i], i); } return ans; } }
|