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) 本题假定输入数据中没有重复,如果有重复,那么会怎样了?下一题和重复情况相关。

你可能感兴趣的:(二分查找)