力扣35. 搜索插入位置

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

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

二分练习,感觉自己对二分的边界处理不太行,纯靠感觉

思路就特判首尾,然后二分找到可以放下数字的位置或者找到数字。一开始l=mid+1那里没处理好,会跳数字,改成l=mid和r=mid就过了

class Solution {
public:
    int searchInsert(vector<int>& nums, int target) {
        int r=nums.size()-1,l=0,mid;
        if(target>nums[r])return r+1;
        else if(target==nums[r])return r;
        else if(target==nums[l])return 0;
        else if(target<nums[l])return 0;
        while(l<=r){
            mid=(l+r)>>1;
            if(target==nums[mid])return mid;
            else if(target>nums[mid]&&target<nums[mid+1]){
                mid++;break;
            }
            else if(target<nums[mid]&&target>nums[mid-1]){
               break;
            }
            else if (target>nums[mid])l=mid;
            else if (target<nums[mid])r=mid;
        }
        return mid ;
    }
};

(代码随想录 (programmercarl.com) 关于边界处理)

 

下面放标准代码,看完以后觉得自己连二分都学的稀烂

 

posted @ 2022-02-28 14:41  小草今天又在摸鱼吗  阅读(40)  评论(0)    收藏  举报