文章

搜索插入位置

搜索插入位置

Leetcode.35

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。

实际上是 二分查找 plus,关键是领悟如果结果不存在,此时应该返回的下标是left还是right或是left+1,right+1,middle。个人经验是在给定的实例里面脑算试一下,得到是到底应该返回哪个。
答案是用二分查找的开区间模式最终返回right即可。

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left = 0,right = nums.size();
        int result = -1;
        while (left<right) {
            int middle = (left+right)/2;
            if (nums[middle]>target) {
                right = middle;
            }else if (nums[middle]<target) {
                left = middle + 1;
            }else {
                result = middle;
                break;
            }
        }
        if (result == -1) {
            return right;
        }else {
            return result;
        }
    }
};

相关知识点: 二分查找

License:  CC BY 4.0