704 二分查找 拓展
- 35.搜索插入位置
- 34.在排序数组中查找元素的第一个和最后一个位置
- 69.x 的平方根
- 367.有效的完全平方数
以上是二分查找的拓展
35 搜索插入位置
和平常的二分查找一样 - 注意定义区间
难点:返回时是 right + 1 - 列举几个情况,寻找结果与mid left right 的关系规律
public int searchInsert(int[] nums, int target) {
int left = 0;
// 原则左闭右闭
int right = nums.length - 1;
int mid = 0;
while (left <= right){
mid = (left + right) / 2;
if (nums[mid] == target) return mid;
else if (nums[mid] > target) {
right = mid - 1;
} else if (nums[mid] < target) {
left = mid + 1;
}
}
return right + 1;
}
34 在排序数组中查找元素的第一个和最后一个位置
和平常的二分查找一样
查找完之后滑动指针寻找左右边界
public int[] searchRange(int[] nums, int target) {
// 二分查找
int index = midSearch(nums, target);
if (index == -1) return new int[]{-1,-1};
else {
// 滑动左右指针
int left = index;
int right = index;
while (left - 1 >= 0 && nums[left - 1] == target)
left--;
while (right + 1 < nums.length && nums[right + 1] == target)
right++;
return new int[]{left,right};
}
}
private int midSearch (int[] nums, int target){
int left = 0;
int right = nums.length - 1;
while (left <= right){
int mid = (left + right) / 2;
if (nums[mid] > target){
right = mid - 1;
} else if (nums[mid] < target) {
left = mid + 1;
}
else return mid;
}
return -1;
}
69 x 的平方根
平常的二分查找
在查找到** s <=x 时,res = mid**
- 小于时:res需要更新一个更大的数(同理 大于时就不用赋值)
- 等于时:mid就是需要返回的值
另外需要注意用于判断平方和需要是long类型 (在num大的情况下,mid的平方可能

最低0.47元/天 解锁文章
556

被折叠的 条评论
为什么被折叠?



