Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].我的方法( O(n 2) ):
public class Solution {
public int[] twoSum(int[] nums, int target) {
int[] tmparray={0,0};
int tmp;
for(int i=0;i<nums.length;i++){
for(int k=1;k<nums.length;k++){
if(nums[i]+nums[k]==target&&i!=k){
tmparray[0]=i;
tmparray[1]=k;
return tmparray;
}
continue;
}
}
return tmparray;
}
}
官网给出方法(O(n))
public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement)) { return new int[] { map.get(complement), i }; } map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution"); }
区别:
1.我的方法是两次循环数组,而官网给出的是将数组放入map
2.我是相加求target,而官网是相减求另外一个数