首页 > 其他分享 >34. 在排序数组中查找元素的第一个和最后一个位置

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

时间:2024-09-04 17:49:05浏览次数:2  
标签:head target nums int mid 34 tail 查找 排序

这题还蛮有意思的,看了下解析,分成两部分分开来求解。

左右边界都是普通的二分查找算法,重点就是当等于的时候的处理,左边界函数等于目标值的时候,要记录当前mid的值作为边界,同时区间要向左移。

反过来,右边界的话,区间要向右移动。记得记录相等时候的mid值,最后一次相等记录的值也就是这个边界值。

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        return {getLeftBorder(nums, target), getRightBorder(nums, target)};
    }
private:
    int getRightBorder(const vector<int>& nums, int target){
        int head = 0, tail = nums.size() - 1;
        int rightBorder = -1;
        while(head <= tail){
            int mid = head + (tail - head) / 2;
            if(nums[mid] < target){
                head = mid + 1; 
            }else if(nums[mid] > target){
                tail = mid - 1;
            }else{
                rightBorder = mid;
                head = mid + 1;
            }
        }
        return rightBorder;
    }
    int getLeftBorder(const vector<int>& nums, int target){
        int head = 0, tail = nums.size() - 1;
        int leftBorder = -1;
        while(head <= tail){
            int mid = head + (tail - head) / 2;
            if(nums[mid] == target){
                leftBorder = mid;
                tail = mid - 1;
            }else if(nums[mid] > target){
                tail = mid -1;
            }else{
                head = mid + 1;
            }
        }
        return leftBorder;
    }
};

标签:head,target,nums,int,mid,34,tail,查找,排序
From: https://www.cnblogs.com/llllmz/p/18397031

相关文章

  • 初次部分使用c++语言无意发现个数组元素查找的代码
    includeusingnamespacestd;//定义结构体structMyArray{intarr[100];//数组,假设最大长度为100intsize;//数组当前元素数量};//输入函数,修改数组内容voidscanf(MyArray&myArray){for(inti=0;i<myArray.size;i++){cin>>myArray.arr[i];//键盘......
  • 南沙信奥赛C++陈老师解一本通题:1341:【例题】一笔画问题
    ​ 题目描述】如果一个图存在一笔画,则一笔画的路径叫做欧拉路,如果最后又回到起点,那这个路径叫做欧拉回路。根据一笔画的两个定理,如果寻找欧拉回路,对任意一个点执行深度优先遍历;找欧拉路,则对一个奇点执行dfs,时间复杂度为O(m+n),m为边数,n是点数。【输入】第一行n,m,有n个点,m条......
  • AT3340:高授时精度的BDS/GPS双模接收机板卡功能资料书
    AT3340特性授时精度:20ns工作电流:62mA内置天线检测功能内置天线短路保护功能完备的授时告警信息天线短路电流:50mA@(3.00V~5.00V)天线开路电流:5mA@(3.00V~5.00V)支持GPS和BDS的单系统授时定位和双系统联合授时定位性能指标:通道数目:32个通道GPSonly、BDSonly、GPS&BDS冷......
  • 在Python中,文本查找和替换的常用操作
    1.使用字符串方法进行查找和替换Python的字符串类(str)提供了简单的查找和替换方法,如find()、replace()等。示例:text="Hello,world!"#查找子字符串的位置position=text.find("world")print(position)#输出:7#替换子字符串new_text=text.replace("world"......
  • 在Python中,文本查找和替换的常用操作
    1.使用字符串方法进行查找和替换Python的字符串类(str)提供了简单的查找和替换方法,如find()、replace()等。示例:text="Hello,world!"#查找子字符串的位置position=text.find("world")print(position)#输出:7#替换子字符串new_text=text.replace("world......
  • 不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信
    不小心删除了一条短信,或者丢失了所有短信?希望还未破灭,下面介绍如何在iPhone上查找和恢复已删除的短信。短信通常都是非正式和无关紧要的,但短信中可能包含非常重要的信息。因此,如果您删除了一些短信以清理iPhone上的空间,却意外删除了一条重要短信,或者清空了iPhone并发现......
  • 360安全卫士极速版,如何查找恢复区,隔离区,信任区
    我已经使用360安全卫士极速版已经2年时间,在个人使用感受上,说实话我觉得很不错,至少没有广告。如果有朋友是360安全卫士的使用者,我推荐你们使用安全极速版界面更加清晰,简洁,好用。很多功能都没有删减,可以说是保留360安全卫士的核心功能下载地址:360官网_360安全卫士极速版_360官方下......
  • 代码随想录算法训练营|Day06 LeetCode 242.有效的字母异位词,349.两个数组的交集,202.快
    理论知识哈希表是根据关键码的值而直接进行访问的数据结构,一般用来快速判断一个元素是否出现在集合里映射——哈希函数哈希碰撞线性探测法拉链法常用的哈希结构数组set(集合)map(映射)242.有效的字母异位词242.有效的字母异位词-力扣(LeetCode)classSolution{......
  • 三路快速排序
    //快速排序functionquickSort(arr){if(arr.length<=1){returnarr;}constpivot=arr[0];constleft=[];constright=[];for(leti=1;i<arr.length;i++){if(arr[i]<pivot){left.push(arr[i]);}else{......
  • lazarus DBGridEh标题栏排序
    lazarusDBGridEh标题栏排序按网上(delphi)的方法发现无效,经测试,以下代码可以正常排序:unitUnit1;{$modeObjFPC}{$H+}interfaceusesClasses,SysUtils,DB,Forms,Controls,Graphics,Dialogs,StdCtrls,Uni,DBGridsEh,DBCtrlsEh,LConvEncoding,DBGridEhImpE......