//先看ans赋值和谁(r=mid-1或者l=mid+1)在一起 //如果和l=mid+1在一起,说明是寻找当前判断条件的最后一个 //如果和r=mid-1在一起,说明是寻找当前判断条件的第一个 //上面说的当前判断条件,需要看清楚ans赋值是在if还是在else里,如果在else里,要取if的反条件 int bs4 (int target, int nums[], int len) { int l=0, r=len-1; int ans = -1; while(l <= r) { int mid = (l+r) >> 1; if(nums[mid] < target) { ans = mid; // ans赋值和l=mid+1在一起,说明是寻找最后一个。在条件是nums[mid]<target里,所以是寻找<target的最后一个 l = mid + 1; } else r = mid - 1; } return ans; } int bs5 (int target, int nums[], int len) { int l=0, r=len-1; int ans = -1; while(l <= r) { int mid = (l+r) >> 1; if(nums[mid] < target) l = mid + 1; else { ans = mid; // ans赋值和r=mid-1在一起,说明是寻找第一个。在条件是nums[mid]>=target里,所以是寻找>=target的第一个 r = mid - 1; } } return ans; }