1. 题目描述
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
2. 思路
思路1 暴力搜索法,遍历数组nums,然后遍历剩余元素,直到找到满足题意的两个下标。时间复杂度为O(n^2)。
思路2 ,为数组建立哈希表(键为数组元素,值为索引),遍历nums,在剩余元素中查找target-nums[i],时间复杂度O(n)。
3. 代码
public int[] twoSum(int[] nums, int target) {
List<Integer> resultList = new ArrayList<Integer>();
Hashtable hash = new Hashtable(100, (float) 0.8);
for (int i = 0; i < nums.length; i++) {
hash.put(nums[i], i);
}
for (int i = 0; i < nums.length; i++) {
Object object = hash.get(target - nums[i]);
if (object != null && (Integer)object != i) {
int t = (Integer)object;
resultList.add(i);
resultList.add((Integer)object);
}
}
int[] result = {resultList.get(0),resultList.get(1)};
return result;
}