力扣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. 搜索插入位置(二分查找)】