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.
重点就是在没有找到的时候,返回这个数字应该插入的位置。
我们这样来考虑,如果在没有找到的时候,low指向的应该是大于target的最小的数字,high指向的是小于target的最大的数字,按照上面例子中的第二个来看,在没有找到的情况下,low指向的是3,索引值为1,high指向的是1,索引值为0。其实直接返回low就可以了。
https://epicfei.wordpress.com/2013/09/06/search-insert-position/
Yu's Coding Garden : leetcode Question 96: Search Insert Position
Read full article from LeetCode – Search Insert Position
This also looks like a binary search problem. We should try to make the complexity to be O(logn).
http://blog.csdn.net/u014688145/article/details/69388673
考点为
lf
和rt
的变动,以上是闭区间的解决方案。主要注意边界条件的使用,需要对数组最后一个元素进行边界判断。
public int searchInsert(int[] nums, int target) {
int lf = 0, rt = nums.length-1;
while (lf < rt){
int mid = lf + (rt - lf) / 2;
if (nums[mid] < target){
lf = mid + 1;
}else{
rt = mid;
}
}
//边界条件
if (nums[rt] < target) return rt + 1;
return rt;
}
http://www.changyu496.com/?p=169重点就是在没有找到的时候,返回这个数字应该插入的位置。
我们这样来考虑,如果在没有找到的时候,low指向的应该是大于target的最小的数字,high指向的是小于target的最大的数字,按照上面例子中的第二个来看,在没有找到的情况下,low指向的是3,索引值为1,high指向的是1,索引值为0。其实直接返回low就可以了。
- public int searchInsert(int[] nums, int target) {
- int index = -1;
- if(nums==null) return index;
- int low = 0;
- int high = nums.length-1;
- while(low<=high){
- int mid = (low + high) >>> 1;
- if(nums[mid] == target){
- return mid;
- }else if(nums[mid]>target){
- high = mid-1;
- }else if(nums[mid]<target){
- low = mid+1;
- }
- }
- index = low;
- return index;
- }
https://epicfei.wordpress.com/2013/09/06/search-insert-position/
int
searchInsert(
int
A[],
int
n,
int
target) {
if
(A[0] > target)
return
0;
if
(A[n - 1] < target)
return
n;
int
i = 0;
while
(i < n)
{
if
(A[i] == target)
return
i;
if
(i + 1 < n && A[i] < target && A[i + 1] > target)
return
i + 1;
++i;
}
return
-1;
}
Read full article from LeetCode – Search Insert Position