题目描述
思路
基础二分搜索模板
本质:找到第一个大于等于target的元素的下标
注意:
- 该题目不存在重复元素
- 存在一种特殊情况:target > nums的最大值,此时插入的位置正好是left的位置
方法一:
class Solution {
public int searchInsert(int[] nums, int target) {
if (nums.length == 0 || nums == null) return 0;
// 左闭右闭区间
int left = 0, right = nums.length - 1;
// 当left = right + 1时退出循环
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) return mid;
else if (nums[mid] < target) left = mid + 1;
else if (nums[mid] > target) right = mid - 1;
}
// 如果没有找到目标值,则left的位置就是该元素需要插入的位置
return left;
}
}
class Solution {
public int searchInsert(int[] nums, int target) {
// 本质:找到第一个大于等于target的元素下标
if (nums == null || nums.length == 0) return 0;
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (target == nums[mid]) {
return mid;
} else if (target < nums[mid]) {
if (mid == 0 || nums[mid - 1] < target) {
return mid;
} else {
right = mid - 1;
}
} else if (target > nums[mid]) {
left = mid + 1;
}
}
// 这里会存在一种情况就是,target > nums的最大值,此时插入的位置正好是left的位置
return left;
}
}
标签:right,return,target,nums,int,Hot,100,LeetCode35,left
From: https://www.cnblogs.com/keyongkang/p/17914665.html