力扣35. 搜索插入位置(二分查找)

力扣35. 搜索插入位置
https://leetcode-cn.com/problems/search-insert-position/
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0


用的是二分法,和《力扣704. 二分查找(顺序查找)》差不多
https://blog.csdn.net/qq_35683407/article/details/105419439
复杂度分析:
时间复杂度:O(logN),这里 N 是数组的长度,每一次都将问题的规模缩减为原来的一半,因此时间复杂度是对数级别的;
空间复杂度:O(1)。

#include "stdafx.h" #include using namespace std; class Solution { public: int searchInsert(vector& nums, int target) { int size = nums.size(); if (size == 0) { return 0; } if (nums[size - 1] < target) { return size; } int low = 0; int high = size - 1; int mid = 0; while (low < high) { int mid = low + (high - low) / 2; //如果等于target,则二分法找到该值位置了 if (nums[mid] == target) { return mid; } // 严格小于 target 的元素一定不是解 else if (target > nums[mid]) {low = mid + 1; } else { high = mid; } } return low; } }; int main() { Solution s; vector nums; nums.push_back(1); nums.push_back(3); nums.push_back(5); nums.push_back(7); int target = 23423; auto result = s.searchInsert(nums, target); return 0; }

【力扣35. 搜索插入位置(二分查找)】

    推荐阅读