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

news2024/11/18 15:22:57

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

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述在这里插入图片描述

思路

Problem: 二分查找常用解题模板(带一道leetcode题目)

直接套用上述中的寻找左、右边界的二分查找模板即可

复杂度

时间复杂度:

O ( l o g n ) O(logn) O(logn);其中 n n n为数组nums的大小

空间复杂度:

O ( n ) O(n) O(n)

Code

class Solution {
public:
    /**
     * Finds the first and last position of an element in a sorted array
     *
     * @param nums Given array
     * @param target Given target number
     * @return vector<int>
     */
    vector<int> searchRange(vector<int>& nums, int target) {
        if (nums.size() == 0) {
            return {-1, -1};
        }
        vector<int> res(2);
        res[0] = left_bound(nums, target);
        res[1] = right_bound(nums, target);
        return res;
    }

    /**
     * Queries the left boundary for a number less than the specified number
     *
     * @param nums Given array
     * @param target Given target number
     * @return int
     */
    int left_bound(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] == target) {
                right = mid - 1;
            } else if (nums[mid] > target) {
                right = mid - 1;
            } else if (nums[mid] < target) {
                left = mid + 1;
            }
        }
        // Check out of bounds
        if (left >= nums.size() || nums[left] != target) {
            return -1;
        }
        return left;
    }

    /**
     * Queries the right boundary for a number less than the specified number
     * 
     * @param nums Given array
     * @param target Given target number
     * @return int
     */
    int right_bound(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] == target) {
                left = mid + 1;
            } else if (nums[mid] > target) {
                right = mid - 1;
            } else if (nums[mid] < target) {
                left = mid + 1;
            }
        }
        // Check out of bounds
        if (right < 0 || nums[right] != target) {
            return -1;
        }
        return right;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1485083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Shellcode ---> 脚本命令入门

今天来浅讲一下shellcode&#xff0c;开始之前&#xff0c;先来乐一乐&#xff0c;哈哈哈哈哈哈哈哈哈哈哈哈 以下的命令你们都别乱用 &#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01…

if-else if-else 语句

if-else if -else语句 定义&#xff1a;是多条件分支语句&#xff0c;即根据多个条件来控制程 序执行的流程。 语法格式&#xff1a; if (表达式) { 若干语句 } else if (表达式) { 若干语句 } … … else { 若干语句 }

云轴科技ZStack与华东师范大学共建产教融合基地

近日&#xff0c;上海云轴信息科技有限公司&#xff08;云轴科技ZStack&#xff09;与华东师范大学上海国际首席技术官学院宣布&#xff0c;共同打造产教融合基地&#xff0c;以促进人才培养与产业需求的全方位融合。这一举措旨在深化教育与产业的合作关系&#xff0c;培养更多…

【Ansys Fluent Web 】全新用户界面支持访问大规模多GPU CFD仿真

基于Web的技术将释放云计算的强大功能&#xff0c;加速CFD仿真&#xff0c;从而减少对硬件资源的依赖。 主要亮点 ✔ 使用Ansys Fluent Web用户界面™&#xff08;UI&#xff09;&#xff0c;用户可通过任何设备与云端运行的仿真进行远程交互 ✔ 该界面通过利用多GPU和云计算功…

Unity AI生成全景图制作天空盒

现在的AI很强大。 其中&#xff0c;有这样一个网站&#xff0c;通过输入提示词&#xff0c;选择某种风格就可以为你生成360全景图。 网页链接 一、生成全景图 打开网页后&#xff0c;如图&#xff1a; 勾选&#xff0c;点击CONFIRM。 点击GET STARTED&#xff0c;进入主页。…

JavaScript 基本数据类型的详解

JavaScript的基本数据类型 以下都是JS内置的几种类型 数据类型描述number数字&#xff0c;不区分整数和小数string字符串类型booleantrue 真, false 假undefined表示未定义的值null只有唯一的值 null&#xff0c;表示空值 number 数字类型 JavaScript 中不区分整数和浮点数&…

使用mysqld --install命令时出现MSVCR120.dll文件丢失错误

Visual C 2013 and Visual C Redistributable Package https://support.microsoft.com/en-us/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package 进去之后先找到自己的版本&#xff0c;x64还是x86&#xff0c;下载 vcredit &#xff0c;进行安装即…

Sora核心之一:可变时长、分辨率、尺寸

Overview 一、总览二、摘要三、引言四、方法4.1、架构改动4.2、训练改变4.3、NaViT的效率 NaViT 一、总览 题目: Patch n’ Pack: NaViT, a Vision Transformer for any Aspect Ratio and Resolution 机构&#xff1a;Google DeepMind 论文: https://arxiv.org/pdf/2307.06304…

AG32 MCU 如何进入低功耗模式

默认情况下&#xff0c;微控制器(MCU)在系统复位或电源复位后处于运行模式。当CPU不需要持续运行时&#xff0c;可以使用几种低功耗模式来节省功耗。这是由用户选择的模式&#xff0c;给出了低功耗&#xff0c;短启动时间和可用的唤醒源之间的最佳妥协。 AG32VF 系列MCU具有以下…

LeetCode 刷题 [C++] 第226题.翻转二叉树

题目描述 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 题目分析 深度优先搜索&#xff08;DFS&#xff09;- 递归方式 对于二叉树的镜像问题&#xff0c;很容易想到的就是使用递归来解决&#xff0c;自底向上依次翻转每一个节点…

python类型注解,多态详解

目录 1.类型注解 1.变量的类型注解 2.函数&#xff08;方法&#xff09;的类型注解 3.union类型 2.多态 抽象类 1.类型注解 1.变量的类型注解 #基础数据类型注解 import randomv1 : int 10 v2 : str "aaa" v3 : bool True#类对象类型注解 class student:p…

kafka文件存储机制和消费者

1.broker文件存储机制 去查看真正的存储文件&#xff1a; 在/opt/module/kafka/datas/ 路径下 kafka-run-class.sh kafka.tools.DumpLogSegments --files ./00000000000000000000.index 如果是6415那么这个会存储在563的log文件之中&#xff0c;因为介于6410和10090之间。 2.…

linux的通信方案(SYSTEM V)

文章目录 共享内存(Share Memory)信号队列&#xff08;Message Queue&#xff09;信号量(semaphore) 进程间通信的核心理念&#xff1a;让不同的进程看见同一块资源 linux下的通信方案&#xff1a; SYSTEM V 共享内存(Share Memory) 特点&#xff1a;1.共享内存是进程见通信最…

图论 - 最小生成树(Prime、Kruskal)

文章目录 前言Part 1&#xff1a;Prim算法求最小生成树1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 Part 2&#xff1a;Kruskal算法求最小生成树1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 前言 本篇博客介绍两种求最小生成树的方法&#xff…

使用OpenCV和mediapipe实现手部信息抓取

目录 运行效果 挨行解读 &#xff08;1&#xff09;初始化MediaPipe Hand模块 &#xff08;2&#xff09;打开摄像头 &#xff08;3&#xff09;初始化计时器 &#xff08;4&#xff09;开始程序主题部分 &#xff08;5&#xff09;读取视频帧 &#xff08;6&#xff09…

c++基础知识补充5

隐式类型转换型初始化&#xff1a;如A a1, 与全局类没有区别&#xff0c;只是受主类的类域限制&#xff0c;内部类天生是主类的友元 采用匿名构造如A()代替A aa可以加速编译器优化 接收建议新创建一个对象

基于springboot+vue的科研工作量管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

大模型(LLM)的token学习记录-I

文章目录 基本概念什么是token?如何理解token的长度&#xff1f;使用openai tokenizer 观察token的相关信息open ai的模型 token的特点token如何映射到数值&#xff1f;token级操作&#xff1a;精确地操作文本token 设计的局限性 tokenizationtoken 数量对LLM 的影响训练模型参…

c语言--qsort函数(详解)

目录 一、定义二、用qsort函数排序整型数据三、用qsort排序结构数据四、qsort函数的模拟实现 一、定义 二、用qsort函数排序整型数据 #include<stdio.h> scanf_S(int *arr,int sz) {for (int i 0; i < sz; i){scanf("%d", &arr[i]);} } int int_cmp(c…

【GitHub】修改默认分支

GitHub的默认分支为main&#xff0c;但我们常常习惯使用master作为默认分支&#xff0c;那在GitHub上如何将master修改为默认分支呢&#xff1f; 全局修改 点击头像&#xff0c;选择菜单栏中的设置 输入master作为默认分支&#xff0c;然后执行updating即可&#xff01; 单项…