Hot100-Day11-T35搜索插入位置

5 阅读1分钟

Day11[26/3/11]T35搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 为 无重复元素 的 升序 排列数组
  • -104 <= target <= 104

解题思路

就是二分查找的小变体

推荐观看:

【【二分查找】十分钟动画演示二分查找所有细节!从此二分不再写错|详解三种区间写法、循环不变量】 www.bilibili.com/video/BV1En…

Code

#include <iostream>
#include <vector>

using namespace std;

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

        return left + 1;
    }
};

auto main() -> int
{
    Solution sol;

    vector<int> nums = {1, 3, 5, 6};
    int target = 5;

    cout << sol.searchInsert(nums, target) << endl;
}