LeetCode-35 - 在排序数组中查找元素的第一个和最后一个位置

news2024/11/15 11:03:28

力扣35题

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

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

image.png

题解思路:

target一共有三种情况:

  1. target比nums[0]小或者比nums[nums.length-1]大,在数组的两边的情况;
  2. 数组中没有target,也需要搜索后才知道;
  3. 数组中有target。

总结:可以先用二分查找找到一个下标,再寻找左右边界。

class Solution {
    public int[] searchRange(int[] nums, int target) {
        // 先用二分查找找到一个下标,再寻找左右边界
        if (nums.length==0||target<nums[0]||target>nums[nums.length-1]){
            return new int[]{-1,-1};
        }
        int index = binarySearch(nums,target);
        if (index==-1){
            return new int[]{-1,-1};
        }
        // 寻找左右边界
        int left=index;
        int right=index;
        while (left-1>=0&&target==nums[left-1]){
            left--;
        }
        while (right+1< nums.length&&target==nums[right+1]){
            right++;
        }
        return new int[]{left,right};
    }

    // 没有找到 target就返回 -1
    public int binarySearch(int[] nums,int target){
        int left=0;
        int right= nums.length-1;
        int mid=0;
        while (left<=right){
            mid=(left+right)/2;
            if (target>nums[mid]){
                left=mid+1;
            } else if (target < nums[mid]) {
                right=mid-1;
            }else {
                return mid;
            }
        }
        return -1;
    }
}

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

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

相关文章

N-way K-shot Few shot learning

首先需要明确的是少样本领域的数据划分和大规模监督学习方法的数据划分不一样。在大规模监督学习方法中&#xff0c;训练集和测试集是混合后按比例随机切分&#xff0c;训练集和测试集的数据分布一致。以分类问题为例&#xff0c;切分后训练集中的类别和测试集中的类别相同&…

二进制部署k8s单master集群

一、常见的K8S部署方式 1、Minikube Minikube是一个工具&#xff0c;可以在本地快速运行一个单节点微型K8S&#xff0c;仅用于学习、预览K8S的一些特性使用。 https://kubernetes.io/docs/setup/minikube 2、Kubeadmin Kubeadmin也是一个工具&#xff0c;提供kubeadm init…

大模型之技术概述

本文作为大模型综述第一篇&#xff0c;介绍大模型技术基本情况。 目录&#xff1a; 1.大模型技术的发展历程 2.大模型技术的生态发展 3.大模型技术的风险与挑战 1.大模型技术的发展历程 2006 年 Geoffrey Hinton 提出通过逐层无监督预训练的方式来缓解由于梯度消失而导致的…

HTML连接样式CSS和表格,表单

HTML连接样式CSS <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>菜鸟教程(runoob.com)</title> </head> <-设置背景都是红色-> <body style"background-color:red;"> <-设置…

从赛场到云端:视频监控技术与赛事直播的技术融合与革新

在当今信息化高速发展的时代&#xff0c;视频监控技术和赛事直播作为两个重要的应用领域&#xff0c;正在以前所未有的速度融合&#xff0c;共同推动着传媒与安防领域的进步。本文将探讨视频监控技术在赛事直播中的应用及其带来的革新。 一、视频监控技术的演进 视频监控技术…

如何对CXL Port做Link Disable和Hot Reset

✨前言&#xff1a; 在CXL的验证测试中&#xff0c;对CXL Port做Link Disable和Hot Reset对比PCie的Port做相同的操作略有不同 ✨1.CXL Extensions DVSEC for Ports 协议里我们可以找到CXL协议里的第八张内容里的CXL Extensions DVSEC for Ports里的Port Control Extensions …

什么情况下你能接受 996

在当下的职场环境中&#xff0c;996 工作制一直是一个备受争议的话题。 “996”是一种工作制度的代称&#xff0c;指的是工作日早上 9 点上班&#xff0c;晚上 9 点下班&#xff0c;中午和傍晚休息 1 小时&#xff08;或不到&#xff09;&#xff0c;总计工作 10 小时以上&…

XSP04 PD诱骗芯片Type-C受电端用电5V9V10V11V12V15V20V,多协议PD+QC+AFC+FCP+SCP+VOOC使用体验

Type-C受电端控制芯片&#xff0c;顾名思义就是应用在用电端&#xff0c;例如3C数码产品、小家电、锂电池快充、小型发热产品等&#xff0c;一般产品使用Type-C接口&#xff0c;需要充电器的快充&#xff08;如9V以上&#xff09;供电&#xff0c;就可以使用XSP04 Type-C控制芯…

DevExpress WPF中文教程:如何将GridControl的更改发布到数据库?

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

【Linux】全志Tina使用swupdate命令进行ab区分区升级操作

一、代码 swupdate -v -i /ota.swu -e stable,now_A_next_B 二、介绍 首先需具备swupdate命令&#xff0c;没有此命令需使用make menuconfig开启。 其次需指定swu文件的路径&#xff0c;代码中的路径是“/ota.swu”。 之后需要知道当前是分区A还是分区B。 --从A升B&#x…

零基础入门AI:一键本地运行各种开源大语言模型 - Ollama

什么是 Ollama&#xff1f; Ollama 是一个可以在本地部署和管理开源大语言模型的框架&#xff0c;由于它极大的简化了开源大语言模型的安装和配置细节&#xff0c;一经推出就广受好评&#xff0c;目前已在github上获得了46k star。 不管是著名的羊驼系列&#xff0c;还是最新…

程序员转行大模型:从代码到无限可能

在技术日新月异的时代背景下&#xff0c;许多程序员开始思考自己的职业发展路径。面对着人工智能与机器学习领域的迅速崛起&#xff0c;越来越多的技术人员将目光投向了更为广阔的天地——转行成为大模型研究者或开发者。这一转变不仅要求个人技能的迭代升级&#xff0c;更是一…

解锁开发新纪元:GPT-4o mini的实战探索与效率革命

&#x1f308;所属专栏&#xff1a;【其它】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点…

容器操作基础命令

文章目录 一、启动容器启动容器用法 二、查看容器状态三、容器相关操作删除容器容器的开启和停止进入容器attachexec 暴露容器的端口查看容器的日志传递运行命令容器内部的hosts文件指定容器的DNS容器内和宿主机之间复制文件 一、启动容器 容器的生命周期 docker run可以启动…

JavaEE---Spring MVC(1)

在这之前我们先启动spring 启动spring之前会遇到很多问题,在这里我遇到的问题是没法run,所以我主要是说一下没法run的情况下我们应该怎么办. question 方法一: 这个时候当我们idea的左侧有maven的时候,我们直接点击maven的刷新按钮即可 方法二: 没有maven的时候我们在idea中打开…

论文阅读 -《N-ary Relation Extraction using Graph State LSTM》

摘要 问题定义&#xff1a;跨句n元关系提取是在多个句子中检测n个实体间关系的自然语言处理任务。 现有方法&#xff1a;现有方法通常将文本构建成文档图&#xff0c;包括句子内部和跨句子的依赖关系。 最先进方法&#xff1a;最先进方法将文档图分割为两个有向无环图&#x…

x-cmd pkg | nvim - 命令行文本编辑器,Vim 的一个现代化分支

目录 简介快速入门功能特点Neovim 插件推荐相关竞品进一步阅读 简介 Neovim&#xff08;简称 nvim&#xff09;是用 C 语言开发的文本编辑器&#xff0c;是 Vim 的一个现代化分支&#xff0c;更专注于提升可扩展性和提供更现代的用户体验。 它是基于 Vim 源代码的一个衍生版本…

电商运营与大数据分析

电商运营与大数据分析&#xff0c;这两者如何相辅相成&#xff0c;助力企业在激烈的市场竞争中脱颖而出&#xff0c;我们一起来分析一下。 电商运营是指管理和优化电子商务平台的一系列活动&#xff0c;目标是提高销售额和客户满意度。这包括下面这些。 商品管理&#xff1a;有…

链路级资损防控之资损字段防控实践|得物技术

一、背景 资损防控是业务稳定性保障的重要一环&#xff0c;资损防控的核心主要有三点&#xff1a;事前规避、事中发现和事后应急。在资损事前规避方面&#xff0c;商家业务从业务场景入手&#xff0c;进行各业务模块的资损场景的梳理&#xff0c;将最容易出现资损的场景梳理出…

申请专利需要注意什么

申请专利需要注意什么 在知识经济时代&#xff0c;专利已成为企业保护创新成果、提升市场竞争力的重要手段。然而&#xff0c;申请专利并非一件简单的事情&#xff0c;它涉及多个环节和复杂的法律程序。 一、了解专利基础知识 首先&#xff0c;申请人需要学习和熟悉专利法及其实…