news 2026/9/23 6:04:15

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

作者头像

张小明

前端开发工程师

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/23 4:08:40

Python大数据技术的基于Hadoop的健康饮食推荐系统的设计与实现_5578bn9k_yh025

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

作者头像 李华
网站建设 2026/9/22 6:08:02

从文本到情感语音:EmotiVoice的技术实现路径

从文本到情感语音&#xff1a;EmotiVoice的技术实现路径 在虚拟助手开始学会“安慰人”&#xff0c;游戏角色能因剧情悲喜而语调起伏的今天&#xff0c;我们正见证语音合成技术从“发声”向“动情”的深刻转变。过去那种机械朗读式的TTS系统&#xff0c;已经无法满足用户对自然…

作者头像 李华
网站建设 2026/9/22 14:53:06

Kotaemon多租户支持能力曝光,适用于SaaS场景

Kotaemon多租户支持能力曝光&#xff0c;适用于SaaS场景 在当今企业竞相构建智能客服、知识助手和自动化服务的浪潮中&#xff0c;一个核心挑战浮出水面&#xff1a;如何以低成本、高安全的方式为成百上千个客户同时提供个性化的AI问答能力&#xff1f;传统的“一客一部署”模式…

作者头像 李华
网站建设 2026/9/22 14:47:59

EmotiVoice语音合成引擎的架构设计与原理剖析

EmotiVoice语音合成引擎的架构设计与原理剖析 在虚拟主播直播中情绪起伏、游戏角色因剧情转折而语气骤变的时代&#xff0c;人们对“机械朗读”早已失去耐心。真正打动用户的&#xff0c;是那些能传递喜怒哀乐、带有个性色彩的声音——这正是现代文本转语音&#xff08;TTS&am…

作者头像 李华
网站建设 2026/9/23 6:08:22

1、Linux API 与 Kylix 开发全解析

Linux API 与 Kylix 开发全解析 1. Linux 系统与 Linux API 概述 Linux 是一款基于 UNIX 的免费操作系统,其起源于 Linus Torvalds 的个人兴趣项目。当时他认为大学所教授的 MINUX 操作系统有改进空间,在全球开发者于互联网上的协助下,经过数年发展,Linux 成为了强大而稳定…

作者头像 李华
网站建设 2026/9/23 3:19:19

3、深入探索Linux API:错误处理与特性对比

深入探索Linux API:错误处理与特性对比 1. 跨操作系统开发与Kylix的优势 在软件开发中,为不同操作系统编写特定功能的函数可以拓展应用程序的边界。例如,在Windows系统下,有如下获取临时文件的函数示例: {$IFDEF WIN32} function GetTempFile: string; varstrPath, st…

作者头像 李华