当前位置: 首页 > article >正文

计算机低能儿从0刷leetcode | 34.在排序数组中查找元素的第一个和最后一个位置 | 二分法

题目:34. 在排序数组中查找元素的第一个和最后一个位置

思路:这道题感觉比33题要简单很多,思路也很顺畅,主要分为两部分。

1、寻找左端点。我们还是使用二分查找,依然是比mid小去左侧,比mid大去右侧。区别是当target == nums[mid]的时候,如果mid-1存在,我们判断nums[mid-1]是否也等于target,如果是就向左查找,因为左端点一定在左侧,否则向右查找。

2、从确定好的左端点位置向右遍历数组,直到找到右端点。

代码:

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        int len = nums.size();
        int l=0,r=len-1;
        int left=-1,right=-1;
        if(len==0) return {-1,-1};
        //左端点
        while(l<=r){
            int mid = (l+r)/2;
            if(target<nums[mid]) r=mid-1;
            else if(target>nums[mid])  l=mid+1;
            else if(target==nums[mid]){
                if(mid>0&&nums[mid-1]==nums[mid])
                    r=mid-1;
                else {left=mid;break;}
            }
        }
        //右端点
        right=left;
        while(right<len-1&&nums[right+1]==target)
            right++;

        vector<int> res={left,right};
        return res;
    }
};


http://www.kler.cn/a/376549.html

相关文章:

  • MySQL数据类型中char与varchar、blob与text的区别
  • 金融标准体系
  • mint-ui Picker 显示异常
  • Git 的特殊配置文件
  • 从源码到成品应用:互联网医院系统与在线问诊APP的开发全解析
  • Vue3和Springboot前后端简单部署
  • 微服务实战系列之玩转Docker(十六)
  • 一文解析axios源码
  • uniapp MD5加密
  • 网络请求优化:理论与实践
  • Oracle视频基础1.3.7练习
  • 【python】爬虫
  • APISQL企业版离线部署教程
  • 二叉苹果树
  • Redis主从复制:全量复制与增量复制区别与联系
  • scala---10.30
  • 《Python爬虫:价格侦探的奇妙冒险》
  • 「C/C++」C/C++ 之 循环结构详解
  • volatile变量
  • Vue2——单页应用程序路由的使用
  • SpringBoot实现国密通信
  • 基于MATLAB驾驶行为的疲劳实时检测研究
  • android数组控件Textview
  • sublime Text中设置编码为GBK
  • 电子时钟--html+css+js实现
  • 【热门主题】000011 React前沿:构建高效与灵动的现代Web应用