搜索插入位置

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

class Solution {
public:
    int searchInsert(vector& nums, int target) {
        // 初始化二分查找的边界:
        // low:左边界,从数组起始位置开始(索引0)
        // high:右边界,从数组最后一个元素位置开始(索引nums.size()-1)
        // mid:中间位置,用于二分查找的中间点
        int low = 0, high = nums.size() - 1, mid = 0;
        
        // 二分查找循环:当左边界 <= 右边界时,继续查找
        while (low <= high) {
            // 计算中间索引(等价于(low+high)/2,但避免整数溢出)
            mid = (low + high) / 2;  // 也可写成 low + (high - low) / 2
            
            // 情况1:找到目标值,直接返回当前中间索引
            if (target == nums[mid])
                return mid;
            // 情况2:目标值小于中间元素,说明目标在左半部分,缩小右边界
            else if (target < nums[mid])
                high = mid - 1;
            // 情况3:目标值大于中间元素,说明目标在右半部分,缩小左边界
            else
                low = mid + 1;
        }
        
        // 循环结束后仍未找到目标值:
        // 此时low > high,low的位置即为目标值应插入的索引
        return low;
    }
};

你可能感兴趣的:(算法,leetcode,数据结构)