问题描述
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
给你一个升序的数组和一个目标值,若能找到目标值则返回其索引,否则返回其插入位置的索引。
注意,数组中没有重复的元素。
举个例子:
Input: [1,3,5,6], 5
Output: 2
解法1
Thanks [Y总]
这道题需要注意一个细节问题,也就是r = n
,其中n
代表数组的长度。
它对应一种特殊的情况,就是target
比数组中最大值还要大。
分别来看下r = n - 1
和r = n
的两种场景:
r = n - 1
r = n
来看下实现:
class Solution {
public int searchInsert(int[] nums, int target) {
int n = nums.length;
int l = 0, r = n;
while (l < r){
int mid = l + r >> 1;
if (nums[mid] >= target) r = mid;
else l = mid + 1;
}
return l;
}
}
Enjoy it !