首页 > 代码库 > LeetCode: Search Insert Position [034]

LeetCode: Search Insert Position [034]

【题目】


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.

Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0


【题意】

给定一个有序的数组和目标值,如果数组中有target值,则返回索引位,如果没有target值,则返回该值应该插入的位置。数组中没有重复元素。


【思路】

二分查找。注意!为了确定插入位置,二分查找的循环条件不能是low<=high, 而因为改为low+1<high
需要考虑以下几种特殊情况:
            1. A数组为空
            2. A数组只有一个元素
            3. target与首尾元素的比较


【代码】

class Solution {
public:
    int searchInsert(int A[], int n, int target) {
        //A数组为空
        if(n==0)return 0;
        //target与首尾元素的比较
        if(target<A[0])return 0;
        else if(target>A[n-1])return n;
        //A数组只有一个元素
        if(n==1 && target==A[0])return 0;
        
        int low=0, high=n-1;
        while(low+1<high){
            int mid=(low+high)/2;
            if(A[mid]==target)return mid;
            else if(target<A[mid]) high=mid;    //注意mid不能排除,否则插入范围就无法确定,因此是mid,而不是常规的mid-1
            else low=mid;   //同high
        }
        if(A[low]==target)return low;
        else return high;
    }
};