开始写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;
}
}