LeetCode(34)SearchInsertPosition

原始题目:

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

思路分析:

类似折半查找的思路,比较简单。可能出问题的地方是对边界条件的分析。


我的代码:

class Solution {
public:
    int _searchInsert(int A[], int target, int start, int end) {
// corner cases start--->
        if(end-start<=1){ //原始输入只有1个元素,或者原始输入只有2个元素,或者经过不断的折半最后只剩下2个元素
            if(A[start]==target)
                return start;
            else if(A[end]==target)
                return end;
            else if(target<A[end]&&target>A[start])
                return start+1;
            else if(target<A[start])
                return start;
            else if(target>A[end])
                return end+1;
// corner cases end--->
        }else{
            int mid=start+(end-start)/2;
            if(target==A[mid])
                return mid;
            else if(target>=A[start]&&target<A[mid])
                return _searchInsert(A, target, start, mid); //如果更严格一些,写为_searchInsert(A, target, start, mid-1)也通过测试
            else if(target>A[mid]&&target<=A[end])
                return _searchInsert(A, target, mid, end);//如果更严格一些,写为_searchInsert(A, target, mid-1, end)也通过测试
            else if(target<A[start])
                return start;
            else if(target>A[end])
                return end+1;
        }
    }
    
    int searchInsert(int A[], int n, int target) {
        return _searchInsert(A,target, 0, n-1);
    }
};

题目小结:
(1) 本题最重要的是边界条件分析。

(2) 本题假定输入数据中没有重复,如果有重复,那么会怎样了?下一题和重复情况相关。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值