文章目录
方法一 :二分查找法
时间复杂度O(n)
空间复杂度 O(1) 只用了2个指针变量
错误
错误原因:找的元素不能包括本身 l = i+1;
所以进行二分查找值 ( target- numbers[i] )的时候不能包括numbers[i]
O(N^2)
class Solution {
public int[] twoSum(int[] numbers, int target) {
for(int i =0;i<numbers.length;i++){
int l = i; //错误
int r = numbers.length;
while(l<r){
int mid = (r+l)/2;
if(numbers[mid] > target - numbers[i]){
r = mid;
}else if(numbers[mid] < target - numbers[i]){
l = mid;
}else{
return new int[]{i+1,mid+1};
}
}
}
throw new IllegalArgumentException("No such two sum");
}
}
二分查找法
- 循环里左边小于右边;含有等号;
- 边界变换的时候不加等号,既然都小于mid了,一定不包含mid;
这个则是 变换的时候包含等号,判断不包含
方法二:双指针
O(n) 空间复杂度 O(1) 只用了2个指针变量