力扣-数组-35 搜索插入位置

解析

时间复杂度要求,所以使用二分的思想,漏掉了很多问题,这里记录

  1. 在left-right=1时,已经找到了插入位置,但是没有赋值,然后break,所以导致一直死循环。

    cpp 复制代码
    if(right - left == 1){
        result = right;
        break;
    }
  2. 在和最右侧数比较时,漏掉了相等时就直接找到,所以在数组是[1,3],target=1时,应该返回下标0

    cpp 复制代码
    if(target <= nums[left]){
         result = left;
         break;
    }               
  3. 长度为0时,不进入循环了,所以循环条件是left <= right。

代码

cpp 复制代码
class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size()-1;
        int result = 0;
        while(left <= right){
            int mid = (left+right)/2;
            if(target <= nums[left]){
                result = left;
                break;
            }
            if( nums[right] < target){
                result = right+1;
                break;
            }
            if( nums[right] == target){
                result = right;
                break;
            }
            if(right - left == 1){
                result = right;
                break;
            }
            if(nums[mid] < target){
                left = mid;
            }else if(target < nums[mid]){
                right = mid;
            }else if(nums[mid] == target){
                result = mid;
                break;
            }
            
        }
        return result;
    }
};
相关推荐
2501_9411126119 分钟前
C++与Docker集成开发
开发语言·c++·算法
智者知已应修善业33 分钟前
【51单片机:两边向中间流水:即两边先点亮然后熄灭,次边的点亮再熄灭,直到最中间的两个点亮再熄灭,然后重复动作。】2023-3-4
c语言·c++·经验分享·笔记·嵌入式硬件·算法·51单片机
醒过来摸鱼1 小时前
9.11 傅里叶变换家族介绍
线性代数·算法·概率论
是苏浙1 小时前
2025年11月17日力扣刷题小记
算法·刷题
@卞2 小时前
ST 表相关练习题
数据结构·c++·算法
醒过来摸鱼2 小时前
9.8 贝塞尔曲线
线性代数·算法·numpy
2501_941111522 小时前
C++中的适配器模式
开发语言·c++·算法
2501_941111942 小时前
C++中的适配器模式变体
开发语言·c++·算法
旋转的马铃薯干2 小时前
bulk RNA-Seq(7)差异表达分析可视化
算法
旋转的马铃薯干2 小时前
bulk RNA-Seq(8)富集分析
算法