思路:
使用双指针,可以使时间复杂度提升为O(N),而暴力法起码要O(N^2)
代码:
class Solution {
public int[] twoSum(int[] nums, int target) {
int i=0,j=nums.length-1;
while(i<j){
int s=nums[i]+nums[j];
if(s<target){
i++;
}
else if(s>target){
j--;
}
else{
return new int[]{nums[i],nums[j]};
}
}
return new int[0];
}
}
分解:
1)过程:
i、j指针分别指向左右边界
1.当两数相加<target,i++
2.两数相减<target,j--
3.相等,则返回2个值
复杂度分析:
时间复杂度:O(N)一次遍历即可
空间复杂度:O(1)