题目:https://oj.leetcode.com/problems/search-insert-position/
题意,用二分法,找到target在数组的位置,如果数组中没有,则找到它要插入的位置,默认数组无重复,并且target与数组也无重复
这一种是我的方法:
class Solution {
public:
int searchInsert(int A[], int n, int target) {
int beg,end,mid;
if(n==0) return 0;
beg = 0;end =n-1;
if(A[n-1]<target) return n;<span style="white-space:pre"> </span>//超过数组的范围
if(A[0]>target) return 0;<span style="white-space:pre"> </span><span style="font-family: Arial, Helvetica, sans-serif;">//超过数组的范围</span><span style="white-space:pre">
</span> while(beg<end){
mid = (beg+end)>>1;
if (A[mid] == target) return mid;
else if(A[mid]<target) beg =mid+1;
else end =mid;
}
return end;
}
};
我在做while判断的时候,用的是小于,在target与Mid比较的时候如果mid>target的话,则end =mid,这样做有个不好的地方,就是当数组只有一个的时候,beg = end =0,target插入的位置就成了end=0了,所以还要比较一下是否超过数组的范围
下面是别人的代码:
class Solution {
public:
int searchInsert(int A[], int n, int target) {
int low = 0,high = n - 1;
while (low <= high){
int mid = (low + high) / 2;
if(A[mid]==target) return mid;
else if (A[mid] >target){
high = mid - 1;
}
else{
low = mid + 1;
}
}
return low;
}
};
这样就不会有问题了,所以在用二分查找发的时候,用end =mid 还是mid+1,既然是mid+1的话,那么判断条件也从beg<end 变成beg <=end