昨天学了二分查找+数组,今天刷题巩固一下~
学习安排根据《代码随想录》~
leetcode 35 搜索插入位置
题目梗概:给定一个排序数组与目标值,在数组中找到该值,返回索引,找不到返回应该插入的位置。(要求算法的时间复杂度为O(log n))
思路:二分查找复杂度为O(log n)
个人解法01:
class Solution {
public:
int searchInsert(vector<int>& nums, int target)
{
int R=nums.size();int L=0;//定义左右变量
int M=0;//定义中间变量,为了方便后续返回一个值
while(L<=R)
{
M=(L+R)/2;
if(nums[M]==target) return M;//找到了返回索引
if(nums[M]>target)
R=M-1;
else if(nums[M]<target)
L=M+1;
}
return M;//没找到 返回M
}
};
结果:执行出错
自查原因:R=nums.size()-1; 当 数组值小于目标值时,M=M+1【防止搜寻的数大于数组中最大的值】
改进:
class Solution {
public:
int searchInsert(vector<int>& nums, int target)
{
int R=nums.size()-1;int L=0;
int M=0;
while(L<=R)
{
M=(L+R)/2;
if(nums[M]==target) return M;
if(nums[M]>target)
R=M-1;
else if(nums[M]<target)
{L=M+1;
M=L;}
}
return M;
}
};
结果: