hot100 | 十一、二分搜索

1-leetcode35. 搜索插入位置

注意:×

  1. 看Labuladong的书,知道while的判断符号跟left right的关系
    public int searchInsert(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] > target) {right = mid - 1;} else if (nums[mid] < target) {left = mid + 1;}}return right+1;}

leetcode74. 搜索二维矩阵

注意:√

  1. 跟之前一个题目很像,这种矩阵直接从左上角或者右下角进行查找即可
    public boolean searchMatrix(int[][] matrix, int target) {int n = 0;int m = matrix[0].length - 1;while (n < matrix.length && m >= 0) {if (matrix[n][m] == target){return true;} else if (matrix[n][m] > target) {m--;} else if (matrix[n][m] < target) {n++;}}return false;}

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

注意:×

  1. 注意找左边界,是right移动–这个其实没问题
  2. 问题是:你移动的时候不可以right == mid,这样会死循环的(其实写的时候就能发现这个问题)所以直接给变化的值,因为后面会判断结果的
  3. 左边界,最下面的判读是判断左边界
  4. 右边界,最下面的判断是判断右边界
    public int[] searchRange(int[] nums, int target) {if (nums.length == 0) {return new int[]{-1, -1};}int[] arr = new int[2];arr[0] = findLeftBound(nums, target);arr[1] = findRightBound(nums, target);return arr;}private int findRightBound(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {left = mid + 1;} else if (nums[mid] > target) {right = mid - 1;} else if (nums[mid] < target) {left = mid + 1;}}if (right < 0) {return -1;}return nums[right] == target ? right : -1;}private int findLeftBound(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target) {right = mid - 1;} else if (nums[mid] > target) {right = mid - 1;} else if (nums[mid] < target) {left = mid + 1;}}if (left == nums.length){return -1;}return nums[left] == target? left: -1;}

4-leetcode33. 搜索旋转排序数组

注意:×

  1. 通过最左边的数字跟nums[mid]进行对比,可以得到左边是 有序还是右边是有序的
  2. 然后判断target的落点
  3. 注意target和nums[left]的值的对比,不要漏掉相等的情况,即:if (nums[mid] > target || nums[left] **<=** target){
    public int search(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right) {int mid = left + (right - left) / 2;if (nums[mid] == target){return mid;} else if (nums[left] <= nums[mid]) {// 左边是有序的if (nums[mid] < target || nums[left] > target){left = mid + 1;}else {right = mid - 1;}} else if (nums[left] > nums[mid]) {// 右边虽然反转了,但是右边是有序的if (nums[mid] > target || nums[left] <= target){right = mid - 1;}else {left = mid + 1;}}}return -1;}

5-leetcode153. 寻找旋转排序数组中的最小值

注意:×

  1. 这个题不能跟上面那个题一样比较左边的值,会出错,因为上面那个只要找到哪边有序就行,但是在这题里面,有序不代表最小,nums[mid] < nums[left]无法得到最小值的位置,可能在左边也可能在右边
  2. 因为要找最小的那个的值,没有target'所以调整了right的修改策略,注意注意!!!!!!!!!!
  3. 第一编写反正是有点怪怪的感觉,不行就记下来吧
    在这里插入图片描述
    在这里插入图片描述
    public int findMin(int[] nums) {int left = 0;int right = nums.length - 1;while (left < right) {int mid = left + (right - left) / 2;if (nums[right] < nums[mid]) {left = mid + 1;} else {right = mid;}}return nums[left];}

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

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

相关文章

AI如何引领个人潜力的深度挖掘

AI如何引领个人潜力的深度挖掘 人工智能&#xff08;AI&#xff09;不仅是一场技术革命&#xff0c;更是对人类自身能力的一次深刻反思。本文旨在探讨在AI时代下&#xff0c;个人如何挖掘并发挥自己的最大潜能&#xff0c;不仅在职场、教育领域找到新的定位&#xff0c;同时也…

PostgreSQL日志文件配置,记录所有操作记录

为了更详细的记录PostgreSQL 的运行日志&#xff0c;我们一般需要修改PostgreSQL 默认的配置文件&#xff0c;这里整理了一些常用的配置 修改配置文件 打开 PostgreSQL 配置文件 postgresql.conf。该文件通常位于 PostgreSQL 安装目录下的 data 文件夹中。 找到并修改以下配…

Python循环遍历:深入理解与实战应用

在Python编程中&#xff0c;循环遍历是一种基本且强大的控制流结构&#xff0c;它允许我们重复执行一段代码直到满足某个条件为止。无论是处理数据集合&#xff08;如列表、元组、字典、集合等&#xff09;&#xff0c;还是执行重复的任务&#xff0c;循环遍历都是不可或缺的工…

807.保持城市天际线

解题思路 首先找到四个主要方向&#xff08;东南西北&#xff09;的天际线情况。南北看是一样的&#xff0c;东西看也是一样的。所以统计出每行的最值&#xff0c;每列的最值&#xff0c;用一个n的数组存储。分别存储行和列的最值。最值的位置进行标记&#xff0c;然后对于其余…

【Qt 基础】绘图

画笔 QPen pen; pen.setWidth(3); // 线条宽度 pen.setColor(Qt::red);// 画笔颜色 pen.setStyle(Qt::DashLine);// 线条样式 pen.setCapStyle(Qt::RoundCap);// 线端样式 pen.setJoinStyle(Qt::BevelJoin);// 连接样式 painter.setPen(pen);线条 线端 连接 画刷 QBrush bru…

Spring容器详细介绍

Spring容器 1 Spring核心容器介绍 问题导入 问题&#xff1a;按照Bean名称获取Bean有什么弊端&#xff0c;按照Bean类型获取Bean有什么弊端&#xff1f; 1.1 创建容器 方式一&#xff1a;类路径加载配置文件 ApplicationContext ctx new ClassPathXmlApplicationContext…

复合类型的字节对齐

引子 #inlcude<stdio.h> struct s{int i;char a: }; struct s sVar {5,A}; int main(void){printf("%d\n",sizeof(sVar)); }问1&#xff1a;上面这个代码的输出结果是多少&#xff1f; 答1&#xff1a; 思考 明明sVar这个结构体就两个元素&#xff0c;5和…

什么是幂等?如何实现幂等?

一 定义 幂等性&#xff08;Idempotence&#xff09;是数学与计算机科学中的一个概念&#xff0c;它指的是一个操作、函数或方法被重复执行多次与仅执行一次的效果相同&#xff0c;或者说&#xff0c;其后续调用的结果不会改变之前调用的结果。 在计算机科学中&#xff0c;这个…

Spring Boot实战:无缝对接OpenAI

Spring Boot实战&#xff1a;无缝对接OpenAI 在当今的技术领域&#xff0c;人工智能&#xff08;AI&#xff09;已经成为一股不可忽视的力量。OpenAI作为其中的佼佼者&#xff0c;提供了强大的API供开发者使用&#xff0c;以实现各种AI功能。本文将详细介绍如何使用Spring Boo…

开闭原则 (Open/Closed Principle, OCP)

开闭原则 (Open/Closed Principle, OCP) 开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;是面向对象设计的五大原则之一。它的基本思想是&#xff1a;软件实体&#xff08;类、模块、函数等&#xff09;应该对扩展开放&#xff0c;对修改关闭。即在不修改现有代码…

uniapp实现水印相机

uniapp实现水印相机-livePusher 水印相机 背景 前两天拿到了一个需求&#xff0c;要求在内部的oaApp中增加一个卫生检查模块&#xff0c;这个模块中的核心诉求就是要求拍照的照片添加水印。对于这个需求&#xff0c;我首先想到的是直接去插件市场&#xff0c;下一个水印相机…

多头注意力机制详解:多维度的深度学习利器

引言 多头注意力机制是对基础注意力机制的一种扩展&#xff0c;通过引入多个注意力头&#xff0c;每个头独立计算注意力&#xff0c;然后将结果拼接在一起进行线性变换。本文将详细介绍多头注意力机制的原理、应用以及具体实现。 原理 多头注意力机制的核心思想是通过多个注…

springAMQP自定义fanout交换机进行消息的广播

rabbitmq一共有三种交换机&#xff1a; fanout--广播direct--定向topic--话题 rabbitmq-web端 首先我们需要建立一个名叫cybg.fanout交换机与两个自定义的队列用于测试广播效果 我这里就起名字叫做fanout_queue1&fanout_queue2 项目中&#xff1a; 首先对我们的Liste…

当代政治制度(练习题)

当代政治制度&#xff08;练习题&#xff09; *** Rz整理 仅供参考 *** 目前地方人大设立的专门委员会不包括&#xff08;B.法律审查委员会F.外交事务专门委员会 &#xff09;答案不确定 等待指点 A.法制委员会 B.法律审查委员会 C.财政经济委员会 D.社会建设委员会 E.农业与…

Go语言基础数据类型、变量及自增语法

本文内容为Go语言的基础数据类型、变量定义和赋值及自增语法介绍。 目录 基础数据类型 变量 先定义后赋值 定义时直接赋值 自动推导定义赋值 平行赋值 自增语法 总结 基础数据类型 int,int8 intl6, int32, int64 uint8... uint64 float32,float64 true/false 变量 …

unity 环形循环切换UI

环形ui管理器 using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System.Collections; using Unity.VisualScripting;public class LevelSelector : MonoBehaviour {public GameObject levelButtonPrefab; // 关卡按钮的…

Elasticsearch:介绍 retrievers - 搜索一切事物

作者&#xff1a;来自 Elastic Jeff Vestal, Jack Conradson 在 8.14 中&#xff0c;Elastic 在 Elasticsearch 中引入了一项名为 “retrievers - 检索器” 的新搜索功能。继续阅读以了解它们的简单性和效率&#xff0c;以及它们如何增强你的搜索操作。 检索器是 Elasticsearc…

Linux:解决vim打开文件默认为replace模式

现象 Ubuntu打开 vim 默认为 replace 模式 原因 终端的编码设置与目标机器的编码设置不同。 解决方案 修改 vim 配置文件( /etc/vim/vimrc或者~/.vimrc)&#xff0c;添加&#xff1a; set termencodingutf-8 set fileformatsunix set encodingprcP.S. vimrc 中注释使用英…

知识图谱与LLMs:实时图分析(通过其关系的上下文理解数据点)

大型语言模型 (LLM) 极大地改变了普通人获取数据的方式。不到一年前&#xff0c;访问公司数据需要具备技术技能&#xff0c;包括熟练掌握各种仪表板工具&#xff0c;甚至深入研究数据库查询语言的复杂性。然而&#xff0c;随着 ChatGPT 等 LLM 的兴起&#xff0c;随着所谓的检索…

Ubuntu系统安装mysql之后进行远程连接

1.首先要配置数据库允许进行远程连接 1.1 打开MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf1.2 修改 bind-address 行 #按i进入插入模式 bind-address 0.0.0.0 #按 Esc 键退出插入模式。 #输入:wq 然后按 Enter 保存并退…