【算法题解答·一】二分法

【算法题解答·一】二分法

接上文 【算法方法总结·一】二分法的一些技巧和注意事项


二分法相关题目如下:

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

  • 使用 左闭右闭[left,right]
  • 关键在于 nums[mid] == target 的部分
  • 第一个 target 的过程中,如果 nums[mid] == target,说明 mid 已经满足条件,但 mid 前面 可能还有相同的 target,把 right 更新为mid - 1,继续往 mid 找;
  • 最后一个 target 的过程中,如果 nums[mid] == target,说明 mid 已经满足条件,但 mid 后面 可能还有相同的 target,把 left 更新为mid + 1,继续往 mid 找。
class Solution {public int[] searchRange(int[] nums, int target) {int[] ans = new int[] { -1, -1 }; // 存结果 {第一,最后}int len = nums.length;if (len == 0) return ans;int left = 0, right = len - 1; // 左闭右闭// 找第一个 target,普通的二分查找while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {ans[0] = mid; // 找到后填入ans[0]中right = mid - 1; // 往 mid 前继续找} else if (nums[mid] > target) {right = mid - 1;} else { // nums[mid] < targetleft = mid + 1;}}// 重新初始化left = 0;right = len - 1;// 找最后一个 target,普通的二分查找while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {ans[1] = mid; // 找到后填入ans[1]中left = mid + 1; // 往 mid 后继续找} else if (nums[mid] > target) {right = mid - 1;} else { // nums[mid] < targetleft = mid + 1;}}return ans;}
}

35.搜索插入位置简单

  • 使用 左闭右开[left,right)
class Solution {public int searchInsert(int[] nums, int target) {int n = nums.length;// 左闭右开,[left,right)int l = 0, r = n;while (l < r) {int mid = l + (r - l) / 2;if (target == nums[mid]) {return mid;} else if (target > nums[mid]) {l = mid + 1;} else {r = mid;}}return l; // 如果不知道返回什么,可以自己模拟一下}
}

74.搜索二维矩阵

  • 使用 左闭右开[left,right)
class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length;// 有序,所以使用二分搜索,[left,right)int l = 0, r = n * m;while (l < r) {int mid = l + (r - l) / 2;int x = mid / n; // 行索引int y = mid % n; // 列索引if (matrix[x][y] == target) {return true;} else if (matrix[x][y] > target) {r = mid;} else {l = mid + 1;}}return false; // 循环结束还没返回 true,说明没有找到,直接返回 false}
}

33.搜索旋转排序数组

  • 使用 左闭右闭[left,right]
  • 第一类 2 3 4 5 6 7 | 1 这种,也就是 nums[l] <= nums[mid]。此例子中是 2 <= 5。这种情况下,前半部分有序。如果 nums[l] <= target < nums[mid],则在前半部分找,否则去后半部分找。
  • 第二类 6 7 | 1 2 3 4 5 这种,也就是 nums[l] > nums[mid]。此例子中就是 6 > 2。这种情况下,后半部分有序。如果 nums[mid] < target <= nums[r],则在后半部分找,否则去前半部分找。
class Solution {public int search(int[] nums, int target) {int l = 0, r = nums.length - 1;while (l <= r) {int mid = l + (r - l) / 2;if (nums[mid] == target) {return mid;}// 前半段有序,后半段无序if (nums[l] <= nums[mid]) {// target 在前半段if (target >= nums[l] && target < nums[mid]) {r = mid - 1;} else { // target 在后半段l = mid + 1;}} else { // 前半段无序,后半段有序// target 在后半段if (target <= nums[r] && target > nums[mid]) {l = mid + 1;} else { // target 在前半段r = mid - 1;}}}return -1; // 没有找到 target}
}

153.寻找旋转排序数组中的最小值

在这里插入图片描述

  • 使用 左闭右开[left,right)
class Solution {public int findMin(int[] nums) {int l = 0, r = nums.length;while (l < r) {int mid = l + (r - l) / 2;// 断崖最小值在mid右边if (nums[mid] > nums[nums.length - 1]) {l = mid + 1; // 往右半段找} else { // 断崖最小值在mid左边,或为midr = mid; // mid也有可能是最小值}}return nums[l];}
}

4.寻找两个正序数组的中位数困难

暴力法很简单,但是二分法很有难度,先挖个坑之后填


算法题解答系列

【算法题解答·二】双指针法
【算法题解答·三】滑动窗口

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Non-Homophilic Graph Pre-Training and Prompt Learning

Non-Homophilic Graph Pre-Training and Prompt Learning KDD25 ​#paper/⭐#​ 目的&#xff1a;对异配图进行prompt ‍ ​​ 方法 邻居节点的综合嵌入 s v 1 ∣ V ( S v ) ∣ ∑ u ∈ V ( S v ) h u ⋅ s i m ( h u , h v ) , \mathbf{s}_{v}\frac{1}{|V(S_{v})|}\su…

BUU44 [BJDCTF2020]ZJCTF,不过如此1 [php://filter][正则表达式get输入数据][捕获组反向引用][php中单双引号]

题目&#xff1a; 我仿佛见到了一位故人。。。也难怪&#xff0c;题目就是ZJCTF 按要求提交/?textdata://,I have a dream&filenext.php后&#xff1a; ......不太行&#xff0c;好像得用filephp://filter/convert.base64-encode/resourcenext.php 耶&#xff1f;那 f…

掌握 findIndex、push 和 splice:打造微信小程序的灵活图片上传功能✨

文章目录 ✨ 掌握 findIndex、push 和 splice&#xff1a;打造微信小程序的灵活图片上传功能 &#x1f31f;示例场景&#xff1a;小程序图片上传&#x1f33c; 认识 findIndex定义语法在代码中的应用示例当前行为 &#x1f680; 认识 push定义语法在代码中的应用示例特点 ✂️ …

山西青年杂志山西青年杂志社山西青年编辑部2025年第3期目录

青年争鸣 教师发展中心行动转向的价值意蕴分析框架研究与启示 于宝证;李军红;郑钰莹;何易雯; 产教融合视角下职业本科工商管理专业人才培养模式探析 杜芯铭; 青年教育研究 教育数字化背景下高职院校的课堂教学研究 张晨; 统筹职业教育、高等教育、继续教育协同…

神经网络:AI的网络神经

神经网络&#xff08;Neural Networks&#xff09;是深度学习的基础&#xff0c;是一种模仿生物神经系统结构和功能的计算模型。它由大量相互连接的节点&#xff08;称为神经元&#xff09;组成&#xff0c;能够通过学习数据中的模式来完成各种任务&#xff0c;如图像分类、语音…

计算机视觉|ViT详解:打破视觉与语言界限

一、ViT 的诞生背景 在计算机视觉领域的发展中&#xff0c;卷积神经网络&#xff08;CNN&#xff09;一直占据重要地位。自 2012 年 AlexNet 在 ImageNet 大赛中取得优异成绩后&#xff0c;CNN 在图像分类任务中显示出强大能力。随后&#xff0c;VGG、ResNet 等深度网络架构不…

储油自动化革命,网关PROFINET与MODBUS网桥的无缝融合,锦上添花

储油行业作为能源供应链的关键环节&#xff0c;其自动化和监控系统的可靠性和效率至关重要。随着工业4.0的推进&#xff0c;储油设施越来越多地采用先进的自动化技术以提高安全性、降低成本并优化运营。本案例探讨了如何通过使用稳联技术PROFINET转MODBUS模块网关网桥&#xff…

解锁Egg.js:从Node.js小白到Web开发高手的进阶之路

一、Egg.js 是什么 在当今的 Web 开发领域&#xff0c;Node.js 凭借其事件驱动、非阻塞 I/O 的模型&#xff0c;在构建高性能、可扩展的网络应用方面展现出独特的优势 &#xff0c;受到了广大开发者的青睐。它让 JavaScript 不仅局限于前端&#xff0c;还能在服务器端大展身手&…

python:pymunk + pygame 模拟六边形中小球弹跳运动

向 chat.deepseek.com 提问&#xff1a;编写 python 程序&#xff0c;用 pymunk, 有一个正六边形&#xff0c;围绕中心点缓慢旋转&#xff0c;六边形内有一个小球&#xff0c;六边形的6条边作为墙壁&#xff0c;小球受重力和摩擦力、弹力影响&#xff0c;模拟小球弹跳运动&…

学习 Wireshark 分析 Android Netlog

Android 设备抓取的日志中,netlog 文件夹包含.cap文件可以使用Wireshark工具查看网络日志。 Wireshark 分析 DNS 步骤 在使用Wireshark分析网路日志时,要检查DNS解析是否正常,可以按照以下步骤操作: 识别DNS查询和回应 使用过滤器 udp.port == 53 来查看所有DNS相关的流量…

OpenHarmony启动系统-U-Boot简介和源码下载与编译

OpenHarmony系统启动流程简述 设备上电后&#xff0c;OpenHarmony系统大致经历以下3个阶段&#xff1a; 1.BootRom代码引导加载UBoot&#xff1b; 2.UBoot启动初始化硬件资源&#xff0c;引导并加载系统内核(Linux内核)&#xff1b; 3.Kernel(LiteOs,Linux内核)启动、加载驱动…

论文笔记-NeurIPS2017-DropoutNet

论文笔记-NeurIPS2017-DropoutNet: Addressing Cold Start in Recommender Systems DropoutNet&#xff1a;解决推荐系统中的冷启动问题摘要1.引言2.前言3.方法3.1模型架构3.2冷启动训练3.3推荐 4.实验4.1实验设置4.2在CiteULike上的实验结果4.2.1 Dropout率的影响4.2.2 实验结…

ctf网络安全赛题

CTF简介 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展…

一周学会Flask3 Python Web开发-WTForms表单验证

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们可以通过WTForms表单类属性的validators属性来实现表单验证。 常用的WTForms验证器 验证器说明DataRequired(messageNo…

工业巡检进入‘无人化+AI’时代:无人机智能系统的落地实践与未来

在现代化工业生产、建筑设施和交通运输等领域&#xff0c;设备设施的稳定运行是保障安全和效率的核心。传统人工巡检方式受限于效率低、成本高、漏检风险大等问题&#xff0c;已难以满足日益复杂的运维需求。在此背景下&#xff0c;无人机智能巡检系统凭借其高效性、智能化和精…

CentOS 7中安装Dify

Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等&#xff0c;让您可以快速从原型到生产。尤其是我们本地部署DeepSeek等大模型时&#xff0c;会需要用到Dify来帮我们快捷的开发和应用。 大家可以参考学习它的中…

Kmeans算法来实现RFM指标计算步骤

K-Means&#xff08;K均值&#xff09;是一种经典的无监督聚类算法&#xff0c;主要用于将数据集划分为 KKK 个不同的簇&#xff08;Cluster&#xff09;。 它基于最小化簇内样本的平方误差&#xff0c;即最小化数据点与簇中心的距离之和。 1. K-Means 算法原理 (1) 主要步骤 …

C# .NET Core HttpClient 和 HttpWebRequest 使用

HttpWebRequest 这是.NET创建者最初开发用于使用HTTP请求的标准类。HttpWebRequest是老版本.net下常用的&#xff0c;较为底层且复杂&#xff0c;访问速度及并发也不甚理想&#xff0c;但是使用HttpWebRequest可以让开发者控制请求/响应流程的各个方面&#xff0c;如 timeouts,…

run方法执行过程分析

文章目录 run方法核心流程SpringApplicationRunListener监听器监听器的配置与加载SpringApplicationRunListener源码解析实现类EventPublishingRunListener 初始化ApplicationArguments初始化ConfigurableEnvironment获取或创建环境配置环境 打印BannerSpring应用上下文的创建S…

1.从0搭建前端Vue项目工程

我们通过vue官方提供的脚手架Vue-cli来快速生成一个Vue的项目模板。 **注意&#xff1a;**需要先安装NodeJS&#xff0c;然后才能安装Vue-cli。 环境准备好了&#xff0c;接下来我们需要通过Vue-cli创建一个vue项目&#xff0c;然后再学习一下vue项目的目录结构。Vue-cli提供了…