二分类型题目
简单二分
leecode第35题
35. 搜索插入位置
解答:
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0, right = nums.length;
while(left < right){
int mid = (left + right)>>1;
if(target <= nums[mid]){
right = mid;
}else{
left = mid + 1;
}
}
return left;
}
}
一道简单的二分, 考虑边界即可
leecode34题(中等)
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] ans = new int[2];
ans[0] = Search(nums,target,true);
ans[1] = Search(nums,target,false);
return ans;
}
public int Search(int[] nums, int target , boolean flag){
int left = 0, right = nums.length;
int ans = -1;
while(left < right){
int mid = (left + right)>>1;
if(target < nums[mid]){
right = mid;
}else if (target > nums[mid]){
left = mid + 1;
}else{
ans = mid;
if(flag){
right = mid;
}else{
left = mid + 1;
}
}
}
return ans;
}
}
用一个标志位来解决边界问题即可, 本质上是二分