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.
给定int型的数组,要求返回包含两个数的索引,这两个索引对应的数组元素的和要等于目标值。你需要保证每一个输入有唯一解,而且你不应该将同一元素使用两次。
解法一:
public class Solution {
public int[] twoSum(int[] nums, int target) {
int[] answer = new int[2];
A:for(int i=0; i<nums.length; ++i){
answer[0]=i;
int now = target-nums[i];
for(int j=i+1; j<nums.length; ++j){
if(now == nums[j]){
answer[1]=j;
break A;
}
}
}
return answer;
}
}
解法二:利用HashMap将时间复杂度降低到O(n)
public class Solution {
public int[] twoSum(int[] nums, int target) {
int[] answer = new int[2];
HashMap<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
map.put(nums[i],i);
}
for(int i=0;i<nums.length;i++){
int b=target-nums[i];
if(map.containsKey(b)&&i!=map.get(b)){
return new int[]{i,map.get(b)};
}
}
return answer;
}
}