LeetCode: Search Insert Position [034]

151 篇文章 0 订阅

【题目】


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;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值