news 2026/9/4 11:18:57

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在排序数组中查找元素的第一个和最后一个位置

题目描述

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

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

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

解题思路:

class Solution { public int[] searchRange(int[] nums, int target) { int[] res = new int[]{-1,-1}; int left = 0; int right = nums.length-1; while(left <= right){ int temp = (left + right) >> 1; if(nums[temp] > target){ right = temp - 1; }else if(nums[temp] < target){ left = temp + 1; }else{ left = temp; right = temp; while((right <nums.length-1)&&(nums[right] == nums[right+1])){ right++; } while((left > 0)&&(nums[left] == nums[left-1])){ left--; } res[0] = left; res[1] = right; } } return res; } }

这是最朴素的思想,二分查找,如果找到了再往两边拓展,处理边界条件,只可惜超时了。

需要对二分法再进行二分查找。

官方题解:

class Solution { public int[] searchRange(int[] nums, int target) { int leftIdx = binarySearch(nums, target, true); int rightIdx = binarySearch(nums, target, false) - 1; if (leftIdx <= rightIdx && rightIdx < nums.length && nums[leftIdx] == target && nums[rightIdx] == target) { return new int[]{leftIdx, rightIdx}; } return new int[]{-1, -1}; } public int binarySearch(int[] nums, int target, boolean lower) { int left = 0, right = nums.length - 1, ans = nums.length; while (left <= right) { int mid = (left + right) / 2; if (nums[mid] > target || (lower && nums[mid] >= target)) { right = mid - 1; ans = mid; } else { left = mid + 1; } } return ans; } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 16:23:01

电商客服自动化新范式:基于Kotaemon的对话引擎设计

电商客服自动化新范式&#xff1a;基于Kotaemon的对话引擎设计 在电商平台日均咨询量动辄数万条的今天&#xff0c;用户早已不再满足于“请稍等&#xff0c;正在为您转接人工”的漫长等待。他们希望问题能被秒级响应、精准解答&#xff0c;甚至无需开口就能完成订单修改或售后申…

作者头像 李华
网站建设 2026/9/3 22:42:10

设置 Linux 的时区

查看当前时间timedatectl status列出时区列表timedatectl list-timezones | grep New_York修改时区sudo timedatectl set-timezone America/New_York查看结果>> timedatectl statusLocal time: Wed 2025-12-17 09:51:37 ESTUniversal time: Wed 2025-12-17 14:51:37 UTCR…

作者头像 李华
网站建设 2026/9/2 19:54:58

基于Python的热门游戏推荐系统的设计与实现_0gx5n277--论文

文章目录系统截图项目简介大数据系统开发流程主要运用技术介绍爬虫核心代码展示结论源码文档获取定制开发/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;系统截图 基于Python的热门游戏推荐系统的设计与实现_0gx5n277–论文 项目简介 本次…

作者头像 李华
网站建设 2026/9/4 2:15:17

Kotaemon留学申请材料准备助手

Kotaemon留学申请材料准备助手 在每年数十万中国学生涌向海外高校的今天&#xff0c;留学申请早已不再是“填个表格、交份成绩单”那么简单。从选校策略到文书打磨&#xff0c;从语言成绩规划到推荐信协调&#xff0c;整个流程涉及上百个决策点和数千条分散的信息源——而这些信…

作者头像 李华
网站建设 2026/9/2 23:31:09

3步解锁网易云音乐NCM文件!Windows用户必备的格式转换神器

3步解锁网易云音乐NCM文件&#xff01;Windows用户必备的格式转换神器 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 还在为网易云音乐的NCM加密文件无法在其…

作者头像 李华
网站建设 2026/9/3 4:24:44

ZooKeeper+Kafka

目录 一、Zookeeper 1.1 Zookeeper 概述 1.2 Zookeeper 工作机制 1.3 ZooKeeper 特点 1.4 Zookeeper 数据结构 1.5 ZooKeeper 应用场景 1.6 Zookeeper 选举机制 1.6.1 第一次启动选举机制 1.6.2 非第一次启动选举机制 Leader 的作用 1. 处理所有写请求&#xff08;核…

作者头像 李华