找出缺失的数字
public class Solution {
public int solve (int[] a) {
int left = 0,right = a.length-1;
while(left<right){
int mid = (left+right)/2;
if(a[mid]==mid) left=mid+1;
else right = mid-1;
}
return left==a[left]?left+1:left;
}
}
正常的二分查找
int i=0,j=nums.length-1;
while(i<=j){
int mid = (i+j)/2;
if(nums[mid]==target){
有重复数字情况
}
return mid+1;
}
else if(nums[mid]>target) j=mid-1;
else i=mid+1;
}
return -1;
三个数的和,固定一位
ArrayList<ArrayList<Integer>> ans = new ArrayList<>();
Arrays.sort(num);
for(int i=0;i<num.length-2;i++){
if(i>0&&num[i]==num[i-1]) continue;
if(num[i]>0) break;
int temp = -num[i];
int left = i+1,right = num.length-1;
while(left<right){
int sum = num[left]+num[right];
ArrayList<Integer> res = new ArrayList<>();
if(sum==temp){
res.add(num[i]);
res.add(num[left]);
res.add(num[right]);
ans.add(res);
while(left<right&&num[left]==num[left+1]) left++;
while(left<right&&num[right]==num[right-1]) right--;
left++;
right--;
}
else if(sum<temp) left++;
else right--;