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

二分查找(Java实现)(1)

二分查找(Java实现)(1)

leetcode 34.排序数组中查找元素第一个和最后一个位置

题目描述:

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

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

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

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:

输入:nums = [], target = 0
输出:[-1,-1]

提示:

  • 0 <= nums.length <= 1e5
  • -1e9 <= nums[i] <= 1e9
  • nums 是一个非递减数组
  • -1e9 <= target <= 1e9

解题思路:

首先,我们根据题意,可以将target分为三种情况:

  • 情况一、 target不在数组范围内

  • 情况二、target在数组范围内,但是数组中没有这个值

  • 情况三、target在数组中

使用二分的条件

  • 数组有序
  • 要求的结果单一

该问题符合有序的特征,但是条件准确来说有两个,即左边界和右边界。

此时,我们可以将问题拆分开来看,即先求左边界,再求右边界。

  1. 对于左边界,我们是为了求数组中,不小于target的值的最小位置。
  2. 对于右边界,我们是为了求数组中,不大于target的值的最大位置。

我们可以将这两个问题,每一个单独看作要求的结果,符合二分使用条件

分开来求。

我们使用全闭区间,对于左边界而言,我们当 arr[mid] >= target的时候,r = mid - 1。这样,最终求得的结果就是符合条件的位置 - 1.

同理,对于有边界而言,是符合条件的位置 + 1

因此 if(r - l > 1) return new int[]{l + 1, r - 1};返回的便是最终结果。其余两种情况分别为无解。

代码

class Solution {public int[] searchRange(int[] nums, int target) {int n = nums.length;int l = get_left(nums, target, n);int r = get_right(nums, target, n);if(l == -2 || r == -2) return new int[]{-1, -1};if(r - l > 1) return new int[]{l + 1, r - 1};return new int[]{-1, -1};}public static int get_right(int nums[], int target, int n) {int l = 0, r = n - 1;int idx = -2;while( l <= r) {int mid = (l + r) / 2;if(nums[mid] <= target) {l = mid + 1;idx = l;} else {r = mid - 1;}}return idx;}public static int get_left(int nums[], int target, int n) {int l = 0, r = n - 1;int idx = -2;while(l <= r) {int mid = (l + r) / 2;if(nums[mid] >= target) {r = mid - 1;idx = r;}else l = mid + 1;}return idx;}}

704、二分查找

题目描述:

704. 二分查找

已解答

简单

相关标签

相关企业

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

提示:

  1. 你可以假设 nums 中的所有元素是不重复的。
  2. n 将在 [1, 10000]之间。
  3. nums 的每个元素都将在 [-9999, 9999]之间。

题解:

本题,可以使用二分,同时,我们使用全开区间进行求解,

对于nums[mid] > target的,r = mid - 1。

对于nums[mid] < target的,l = mid + 1;

相同返回结果。

然后我们需要考虑到会有数组过于小,导致没有进循环的情况,返回结果使用一个三目运算符判断就是最终结果了。

代码:

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

相关文章:

二分查找(Java实现)(1)

二分查找&#xff08;Java实现&#xff09;&#xff08;1&#xff09; leetcode 34.排序数组中查找元素第一个和最后一个位置 题目描述: 给你一个按照非递减顺序排列的整数数组 nums&#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如…...

力扣103.二叉树的锯齿形层序遍历

题目描述 题目链接103. 二叉树的锯齿形层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xff09;。 示例 1&#xff…...

Search with Orama

1.前言 在不久之前&#xff0c;我把 DevNow 的搜索组件通过 Lunr 进行了重构&#xff0c;从前端角度实现了对文章内容的搜索&#xff0c;但是在使用体验上&#xff0c;感觉不是特别好&#xff0c;大概有如下几个原因&#xff1a; 社区的文章数量比较少&#xff0c;项目的 Com…...

一万台服务器用saltstack还是ansible?

一万台服务器用saltstack还是ansible? 选择使用 SaltStack 还是 Ansible 来管理一万台服务器&#xff0c;取决于几个关键因素&#xff0c;如性能、扩展性、易用性、配置管理需求和团队的熟悉度。以下是两者的对比分析&#xff0c;帮助你做出决策&#xff1a; SaltStack&…...

计算机类大厂实习春招秋招开发算法面试问答练习题

计算机类大厂实习春招秋招开发算法面试问答练习题 下面有十个非常重要且常问,面试者却注意不到的问题,我们一个个来看,一个个来学。 线程创建到删除过程中,底层是怎么实现的 1.线程创建 线程创建是线程生命周期的起点。在操作系统中,线程可以通过多种方式创建,但无论哪…...

【热门主题】000068 筑牢网络安全防线:守护数字世界的坚实堡垒

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…...

RPC与HTTP调用模式的架构差异

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;和 HTTP 调用是两种常见的通信模式&#xff0c;它们在架构上有以下一些主要差异&#xff1a; 协议层面 RPC&#xff1a;通常使用自定义的二进制协议&#xff0c;对数据进行高效的序列化和反序列化&am…...

计算机网络之传输层协议UDP

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络之传输层协议UDP 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…...

Uniapp 微信小程序内打开web网页

技术栈&#xff1a;Uniapp Vue3 简介 实际业务中有时候会需要在本微信小程序内打开web页面&#xff0c;这时候可以封装一个路由页面专门用于此场景。 在路由跳转的时候携带路由参数&#xff0c;拼接上web url&#xff0c;接收页面进行参数接收即可。 实现 webview页面 新…...

阅读方法论

选择固有缺陷,选项是对比出来的...

373. 查找和最小的 K 对数字

参考的这个博客&#xff1a; https://zhuanlan.zhihu.com/p/457239781 然后看这个代码我想到了另外一种方法&#xff0c;就是一步一步往里加元组 ( i , j ) (i,j) (i,j)&#xff0c;看代码就知道了&#xff0c;不过需要做一步去重&#xff0c;去重不能用 i n t [ ] int[] int…...

常用函数的使用错题汇总

目录 new/delete malloc/free1. 语言和类型2. 内存分配3. 内存释放4. 安全性和类型安全5. 其他特性总结 线程停止文件流 new/delete malloc/free malloc/free 和 new/delete 是 C/C 中用于动态内存管理的两种方式&#xff0c;它们有一些重要的区别。以下是这两种方式的比较&…...

uniapp手机端一些坑记录

关于 z-paging-x 组件&#xff0c;在ios上有时候通过弹窗去粗发它reload时会触发闪退&#xff0c;可能是弹框插入进去导致的DOM 元素已经被移除或者不可用&#xff0c;解决办法是加上他自带属性 :showRefresherWhenReload"true" 加上showRefresherWhe…...

2024学习之前端微信小程序开发教程,从入门到精通-含基础+实战+源码code

目录 一、简单介绍 二、课程需知 三、内容编排 1、小程序基础  起步式 目录结构 小程序框架 场景值  逻辑层 视图层 组件 视图容器 基础内容 表单组件 导航 媒体组件 Api 路由 界面 交互 网络 数据缓存 自定义组件 2、项目实战 …...

netconf 代码架构

NETCONF&#xff08;Network Configuration Protocol&#xff09;是一种基于 XML 的网络配置管理协议&#xff0c;主要用于在网络设备之间进行配置管理、状态监控和操作。它被设计为一种可扩展的协议&#xff0c;并且在自动化网络管理中扮演着重要角色。NETCONF 通过安全的通信…...

蒙特卡洛方法(Monte Carlo,MC)

目录 1 序言 2 Monte Carlo法计算积分 3 最优化计算Monte Carlo法 1 序言 蒙特卡罗方法(Monte Carlo)是由冯诺依曼和乌拉姆等人发明的&#xff0c;“蒙特卡罗”这个名字是出自摩纳哥的蒙特卡罗赌场&#xff0c;这个方法是一类基于概率的方法的统称。是一种应用随机数来进行…...

python学习笔记8-函数2

参数传递 传不可变对象 & 传可变对象 def func(b):print(id(a), a) #140737041872600 234print(id(b), b) #140737041872600 234a 234 func(a)def func(b):print(id(a), a) #1413554098560 [343]print(id(b), b) #1413554098560 [343]a [343] func(a)def func(b):b.appe…...

电商项目高级篇06-缓存

电商项目高级篇06-缓存 1、docker下启动redis2、项目整合redis3、redis改造三级分类业务 缓存 流程图&#xff1a; data cache.load(id);//从缓存加载数据 If(data null){ data db.load(id);//从数据库加载数据 cache.put(id,data);//保存到 cache 中 } return data;在我们…...

使用 `aircrack-ng`扫描、获取握手包

使用 aircrack-ng 工具集来扫描 5GHz WiFi 网络的过程与扫描 2.4GHz 网络类似&#xff0c;但需要注意一些特定的配置和命令。以下是一个详细的步骤指南&#xff0c;帮助你在 5GHz 频段上扫描 WiFi 网络并捕获握手包。 ### 前提条件 1. **操作系统**&#xff1a;通常在 Linux 系…...

基于大数据python 酒店数据分析可视化大屏系统(源码+LW+部署讲解+数据库+ppt)

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 很对人不知道选题怎么选 不清楚自己适合做哪块内容 都可以免费来问我 避免后期給自己答辩找麻烦 增加难度&#xff08;部分学校只有一次答辩机会 没弄好就延迟…...

从Eclipse转战IDEA?这份无缝迁移指南和习惯养成清单请收好

从Eclipse到IDEA&#xff1a;开发者高效迁移实战手册 第一次打开IntelliJ IDEA的Eclipse转岗开发者&#xff0c;往往会被它精致的界面和丰富的功能所震撼&#xff0c;但随之而来的是各种不适应——"我的项目结构怎么不见了&#xff1f;""这个快捷键怎么和Eclips…...

如何用免费AI工具实现专业级语音转文字:Faster-Whisper-GUI完全指南

如何用免费AI工具实现专业级语音转文字&#xff1a;Faster-Whisper-GUI完全指南 【免费下载链接】faster-whisper-GUI faster_whisper GUI with PySide6 项目地址: https://gitcode.com/gh_mirrors/fa/faster-whisper-GUI 还在为会议录音整理而头疼吗&#xff1f;还在为…...

Spring Statemachine详解底层和落地

一、什么是状态机?为什么 Spring 要专门封装它 1.1 从“if-else 海啸”说起 在任何一个具有多状态的生命周期管理场景中,这种代码非常常见: if (order.getStatus() == OrderStatus.CREATED) {if (event == Event.PAY) {// 支付逻辑order.setStatus(OrderStatus.PAID);} e…...

MongoDB副本集高可用:构建企业级数据库集群

写在前面:高可用是生产环境数据库的核心要求,MongoDB通过副本集(Replica Set)实现数据冗余和故障自动转移。本篇将详细介绍MongoDB副本集的原理、配置和管理,带您构建高可用的数据库集群。 文章目录 一、副本集基础概念 1.1 什么是副本集? 1.2 副本集工作原理 1.3 副本集…...

为OpenClaw智能体工作流配置Taotoken模型服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 为OpenClaw智能体工作流配置Taotoken模型服务 OpenClaw是一个用于构建和编排AI智能体的开源框架&#xff0c;它支持通过配置来连接…...

BooruDatasetTagManager:智能标注架构革命,让AI训练数据预处理效率提升300%

BooruDatasetTagManager&#xff1a;智能标注架构革命&#xff0c;让AI训练数据预处理效率提升300% 【免费下载链接】BooruDatasetTagManager 项目地址: https://gitcode.com/gh_mirrors/bo/BooruDatasetTagManager 在AI模型训练领域&#xff0c;数据标注的质量直接决定…...

Ubuntu和Centos中安装软件的命令

Centos和Ubuntu虽然都是Linux系统&#xff0c;但它们的软件包管理工具不同&#xff0c;因此安装软件的命令也有所区别核心区别如下&#xff1a;Centos&#xff1a;使用yum或dnf命令&#xff0c;包格式为.rpmUbuntu&#xff1a;使用apt命令&#xff0c;包格式为.deb包格式就是Li…...

抖音批量下载终极指南:高效内容采集与管理方案

抖音批量下载终极指南&#xff1a;高效内容采集与管理方案 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback support. 抖音…...

如何为你的Nextjs应用快速添加Taotoken大模型对话功能

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 如何为你的Nextjs应用快速添加Taotoken大模型对话功能 1. 项目准备与环境变量配置 在开始集成之前&#xff0c;你需要一个可运行的…...

不止于安装:将FortiWeb VM 6.3.4打造成你的个人Web应用攻防演练靶场

从零构建企业级Web安全演练场&#xff1a;FortiWeb VM 6.3.4深度实战指南 当你已经完成了FortiWeb VM的基础安装&#xff0c;这仅仅是打开了Web应用安全世界的第一道门。真正的价值在于如何将这个虚拟防火墙转化为你的私人攻防实验室&#xff0c;让每一次点击都成为对抗真实威胁…...