1.暴力
暴力算法時間複雜度O(n²),空間複雜度O(1)
public static int[] twoSum(int[] nums, int target) {
for (int i = 0; i < nums.length; i++) {
for (int j = i; j < nums.length; j++) {
if(nums[i]+nums[j]==target) {
return new int[]{nums[i],nums[j]};
}
}
}
return null;
}
2.排序+雙指針法
public static int[] twoSum1(int[] nums, int target) {
Arrays.sort(nums);
int left=0;
int right=nums.length-1;
while (left<right) {
if(nums[left]+nums[right]>target) {
right--;
}else if (nums[left]+nums[right]<target) {
left++;
}else {
return new int[]{nums[left],nums[right]};
}
}
return null;
}
3、利用map數組構造映射,遍歷nums[i]時,看target-nums[i]是否存在hash表中即可
public static int[] twoSum2(int[] nums, int target) {
Map<Integer,Integer> map=new HashMap<>();
for (int i = 0; i < nums.length; i++) {
if(map.containsKey(target-nums[i])) {
return new int[]{nums[map.get(target-nums[i])],nums[i]};
}
map.put(nums[i],i);
}
return null;
}