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

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

🔗 https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array

题目

  • 给一个非降序数组,查找 target 数字出现的第一个 index 和最后一个 index,若不存在返回 -1

思路

  • 二分查找 lower bound 和 upper bound
  • 对于查找 lower bound,碰到相等的数字,挪动 r 下标到 mid,逐渐向 lower 逼近
  • 对于查找 upper bound,mid 需要在偶数时,取中间偏大的值,碰到相等的数字时,挪动 l 下标到 l,逐渐向 upper 逼近

代码

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

    int find_upper(vector<int>& nums, int target) {
        if (nums.size() == 0) return -1;
        int l = 0, r = nums.size() - 1;
        while (l < r) {
            int mid = (l + r) / 2 + (l + r) % 2;
            if (nums[mid] > target) r = mid - 1;
            else if (nums[mid] == target) l = mid;
            else if (nums[mid] < target) l = mid + 1;
        }
        if (nums[r] == target) return r;
        return -1;
        
    }
    vector<int> searchRange(vector<int>& nums, int target) {
        vector<int> ans;
        ans.push_back(find_lower(nums, target));
        ans.push_back(find_upper(nums, target));
        return ans;
    }
};

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

相关文章:

  • NRC优先级中比较特殊的—NRC0x13和NRC0x31
  • 自定义EasyCode模板生成CRUD
  • JWT与Token
  • Redis 数据库源码分析
  • 【C语言】可移植性陷阱与缺陷(八): 随机数的大小
  • springboot 集成 etcd
  • SpringBoot3动态切换数据源
  • 基于springboot的网上商城购物系统
  • 2025.1.8(c++对c语言的扩充——堆区空间,引用,函数)
  • Mysql面试相关
  • 使用 vue3 赋值后视图没变化的问题
  • 蓝桥杯训练
  • T-SQL语言的语法
  • 使用 SQLite3 的基本操作步骤
  • Azkaban其一,介绍、体系架构和安装
  • Linux-----结构体与联合体,大小端模式
  • 高等数学学习笔记 ☞ 函数的求导法则
  • Maven核心与单元测试
  • Linux-Ubuntu之I2C通信
  • iOS 逆向学习 - iOS Architecture Media Layer
  • Ubuntu 上安装 Docker
  • Kotlin OpenCV 画画
  • QPS和TPS 的区别是什么?QPS 大了会有什么问题,怎么解决?
  • Java基础概念
  • EasyExcel上传校验文件错误信息放到文件里以Base64 返回给前端
  • springboot + vue+elementUI图片上传流程