一开始想用股票的传统方法,双层for循环,结果超出时间限制。
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] arr = new int[2];
for(int i = 0; i<nums.length-1; i++){
for(int j = 1; j<nums.length; j++){
if(nums[i] + nums[j] == target){
arr[0] = nums[i];
arr[1] = nums[j];
break;
}
}
}
return arr;
}
}
所以采用对撞双指针的方法,与剑指offer21题相类似。
class Solution {
public int[] twoSum(int[] nums, int target) {
int i = 0,j = nums.length-1;
while(i<j){
int sum = nums[i]+nums[j];
if(sum>target){j--;}
else if(sum<target){i++;}
else return new int[]{nums[i],nums[j]};
}
return new int[0];
}
}