35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
- 输入: [1,3,5,6], 5
- 输出: 2
示例 2:
- 输入: [1,3,5,6], 2
- 输出: 1
示例 3:
- 输入: [1,3,5,6], 7
- 输出: 4
示例 4:
- 输入: [1,3,5,6], 0
- 输出: 0
思路
-
这个也属于二分查找的范围,题目要求给定一个target,如果数组中有这个target则返回下标,如果没有这个target则返回这个数据在数组中顺序插入的位置
-
我感觉这个题最妙的就是找插入位置的过程
return right +1
就可以轻松找到我们的插入位置
为什么呢?
-
我们找插入位置,无非也就三种情况
-
要插入的非常小,得插在最左边
-
要插入的非常大,要插在最右边
-
要插入的插进了我们数组的中间
-
-
先看第一种情况
-
再看第二种情况
-
最后是第三种情况
-
经过我们刚刚的判断,我们发现
无论什么情况,元素的插入位置始终是right+1
所以,我们return right+1来表示元素的插入位置
太美丽啦 算法!
再来看看下面的代码吧家人们
class Solution {
public int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length-1;
int mid = 0;
while(left<=right)
{
mid = (int)(left+(right-left)/2);
if(nums[mid]>target)
{
right = mid-1;
}
if(nums[mid]<target)
{
left = mid+1;
}
if(nums[mid]==target)
{
return mid;
}
}
return right+1;
}
}