【力扣hot100题】(064)在排序数组中查找元素的第一个和最后一个位置

调试了半天终于过了......

神人题目,主要是情况太太太多了,有先找到左边界的情况、先找到右边界的情况、找到中间节点之后要依次找左右边界的情况......其实要是弄多一点循环应该就不会像我写的这么复杂,但我太懒了就是不想多开循环。

cpp 复制代码
class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        int left=0;
        int right=nums.size()-1;
        vector<int> result{-1,-1};
        int recordl=left;
        int recordr=right;
        while(left<=right){
            int mid=(left+right+1)/2;
            if(nums[mid]>target) right=mid-1;
            else if(nums[mid]<target) left=mid+1;
            else{
                if(mid+1==nums.size()||nums[mid+1]!=target){result[1]=mid;right=mid-1;}
                if(mid==0||nums[mid-1]!=target){result[0]=mid;left=mid+1;}
                if(result[1]!=-1&&result[0]!=-1) return result;
                else if(result[0]!=-1&&recordl!=0){
                    left=recordl;
                    right=recordr;
                    recordl=0;
                }
                else if(result[0]==-1&&recordl==0){
                    recordl=mid+1;
                    recordr=right;
                    right=mid-1;
                }
                else if(result[0]==-1) right=mid-1;
                else left=mid+1;
            }
        }
        return result;
    }
};
相关推荐
不知天地为何吴女士1 小时前
Day32| 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
算法
小坏坏的大世界1 小时前
C++ STL常用容器总结(vector, deque, list, map, set)
c++·算法
励志要当大牛的小白菜4 小时前
ART配对软件使用
开发语言·c++·qt·算法
qq_513970444 小时前
力扣 hot100 Day56
算法·leetcode
PAK向日葵5 小时前
【算法导论】如何攻克一道Hard难度的LeetCode题?以「寻找两个正序数组的中位数」为例
c++·算法·面试
爱装代码的小瓶子6 小时前
数据结构之队列(C语言)
c语言·开发语言·数据结构
爱喝矿泉水的猛男7 小时前
非定长滑动窗口(持续更新)
算法·leetcode·职场和发展
YuTaoShao7 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
YouQian7728 小时前
Traffic Lights set的使用
算法
go54631584659 小时前
基于深度学习的食管癌右喉返神经旁淋巴结预测系统研究
图像处理·人工智能·深度学习·神经网络·算法