编程导航算法村第九关 | 二分查找

编程导航算法村第九关 | 二分查找

  • LeetCode852.这个题的要求有点啰嗦,核心意思就是在数组中的某位位置i开始,从0到i是递增的,从i+1 到数组最后是递减的,让你找到这个最高点。
    详细要求是:符合下列属性的数组 arr 称为山脉数组 :arr.length >= 3存在 i(0 < i < arr.length - 1)使得:

    arr[0] < arr[1] < … arr[i-1] < arr[i]

    arr[i] > arr[i+1] > … > arr[arr.length - 1]
  • 思路:
    • 使用二分查找:
      • 首先确定左右边界
      • 因为必然不是第一个与最后一个,取值范围便是1,length-2
      • 分三种情况讨论
      • 左边递增区域
      • 右边递增区域
      • 找见最大值
public int peakIndexInMountainArray(int[] arr) {int left = 1;int right = arr.length - 2;while (left < right) {int mid = left + ((right - left) >> 1);
//            符合条件的情况if (arr[mid - 1] < arr[mid] && arr[mid] > arr[mid + 1]) {return mid;}if (arr[mid] > arr[mid - 1] && arr[mid] < arr[mid + 1]) {left = mid + 1;}if (arr[mid] < arr[mid - 1] && arr[mid] > arr[mid + 1]) {right = mid - 1;}}return left;}

旋转数字的最小数字

LeetCode153 已知一个长度为 n 的数组,预先按照升序排列,经由1到n次旋转后,得到输入数组。例如原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:

若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]

若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]

 public int findMin(int[] nums) {
//    如果最小值在中间
//    最小值在左边开端、右边开端int left = 0;int right = nums.length - 1;while (left < right) {int mid = left + ((right - left) >> 1);if (nums[mid] < nums[right]) {right = mid;}else {left = mid + 1;}}return nums[left];}

找缺失数字

剑指offer题目: 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。

  • 思路:
    • 找出第一个num[i]!=i的值就是返回值
public int missingNumber(int[] nums) {int left = 0;int right = nums.length - 1;while (left <= right) {int mid = left + ((right - left) >> 1);if (nums[mid] == mid) {left = mid + 1;} else {right = mid - 1;}}return left;}

优化求平方根

剑指offer题目
实现函数 int sqrt(int x).计算并返回x的平方根这个题的思路是用最快的方式找到n*n=x的n。这里涉及到四舍五入,所以采用折半进行比较:

  • 思路:在此处需要使用除法,如果使用乘法则可能会导致越界的问题
 public int mySqrt(int x) {int left = 1;int right = x;while (left <= right) {int mid = left + ((right - left) >> 1);if (x / mid > mid) {left = mid + 1;} else if (x / mid < mid) {right = mid - 1;} else if (x / mid == mid) {return mid;}}return right;}

二叉搜索树

2.1 二叉搜索树中搜索特定值
LeetCode 700.给定二叉搜索树(BST)的根节点和一个值。

  public TreeNode searchBST(TreeNode root, int val) {if (root == null) {return null;}if (root.val == val) {return root;}
//        if (root.left != null && root.right != null) {return   searchBST(root.val > val ? root.left : root.right,val);
//        }}

验证二叉搜索树

  • LeetCode98.给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
  • 需要按照中序遍历,判断左子树是否是二叉搜索树,记录当前节点的值,要保证后面节点的值要大于前面所有节点的值
 private long pre = Long.MIN_VALUE;public boolean isValidBST(TreeNode root) {if (root == null) {return true;}if (!isValidBST(root.left)) {return false;}if (root.left != null) {if (root.val <= root.left.val) {return false;}}if (root.right != null) {if (root.val >= root.right.val) {return false;}}if (root.val <= pre) {return false;}pre =  root.val;if (!isValidBST(root.right)) {return false;}return true;}

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

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

相关文章

Linux系统中redis基础

本节主要学习redis的概述&#xff0c;安装目录结构&#xff0c;命令解析和redis登录更改&#xff0c;数据库的操作&#xff0c;和redis的持久化。 目录 一、概述 二、安装 1.编译安装 2.rpm安装 三、目录结构 四、命令解析 五、redis登陆更改 问题 解决办法 六、数据…

P11-Transformer学习1.1-《Attention Is All You Need》

Transformer目录:《Transformer Paper》1.0 CV Transformer必读论文5篇_汉卿HanQ的博客-CSDN博客 前文参考:Transformer1.0-预热_汉卿HanQ的博客-CSDN博客 全文1w3字左右&#xff0c;按照论文翻译个人理解精读&#xff0c;如果对你有所帮助&#xff0c;欢迎点个赞哦&#xff…

MQTT消息传输过程,网络断开后,断线重连及订阅消息恢复

1&#xff0c;首先要在网络失败的地方进行client重连 2&#xff0c;一定要设置发送超时&#xff0c;默认是-1&#xff0c;是不断进行发送的&#xff0c;会被长阻塞在这里&#xff0c;单位是ms 3&#xff0c;参考链接 https://vimsky.com/examples/detail/java-method-org.ec…

揭秘无人机在水利行业中如何应用

无人机的应用已经成为现代科技的重要组成部分&#xff0c;在水利行业中&#xff0c;无人机的应用同样发挥了极其重要的作用。无人机在水利行业中的应用&#xff0c;不仅提高了工作效率&#xff0c;还极大地降低了人力和物力成本&#xff0c;为水利工作注入了新的活力。 一、无人…

2023集成电路产业发展与产教融合高峰论坛会议顺利举行

8月5日&#xff0c;由中国半导体行业协会和市政府共同主办&#xff0c;天水师范学院、天水华天科技股份有限公司、杭州加速科技有限公司承办的2023集成电路产业发展与产教融合高峰论坛在天水举行。天水市委书记冯文戈&#xff0c;教育部学生服务与素质发展中心副主任方伟&#…

Flutter父宽度自适应子控件的宽度

需求&#xff1a; 控件随着金币进行自适应宽度 image.png 步骤&#xff1a; 1、Container不设置宽度&#xff0c;需要设置约束padding&#xff1b; 2、文本使用Flexible形式&#xff1b; Container(height: 24.dp,padding: EdgeInsetsDirectional.only(start: 8.dp, end: 5.d…

【知识图谱】图数据库Neo4jDesktop的安装图文详解(小白适用)

neo4j 的安装需要有jdk环境的支持。因此在安装Neo4j之前&#xff0c;需要安装Java JDK。 一.安装JDK 参考文章https://blog.csdn.net/weixin_41824534/article/details/104147067?spm1001.2014.3001.5502 二.Neo4j下载 进入Neo4j官网 选择下载中心 下滑选择Neo4j Deskto…

【学习笔记】生成式AI(ChatGPT原理,大型语言模型)

ChatGPT原理剖析 语言模型 文字接龙 ChatGPT在测试阶段是不联网的。 ChatGPT背后的关键技术&#xff1a;预训练&#xff08;Pre-train&#xff09; 又叫自监督式学习&#xff08;Self-supervised Learning&#xff09;&#xff0c;得到的模型叫做基石模型&#xff08;Founda…

redis与MongoDB的区别

1.Redis与MongoDB的概念 1.1 MongoDB MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB …

TS学习02-接口

接口 ts原则之一就是对值所具有的结构进行类型检查。 结构的左右就是为了这些类型命名和代码定义契约 interface LabelValue {label: string } function point(label: LabelValue) {} let obj {label:标题&#xff0c;age: 18} point(obj)类型检查器不会去检查属性的顺序&a…

Go重写Redis中间件 - Go实现Redis集群

Go实现Redis集群 这章的内容是将我们之前实现的单机版的Redis扩充成集群版,给Redis增加集群功能,在增加集群功能之前,我们先学习一下在分布式系统中引用非常广泛的技术一致性哈希,一致性哈希在我们项目里就应用在我们Redis集群的搭建这块 详解一致性哈希 Redis集群需求背…

服务器杂七杂八的知识/常识归纳(不断更新)

一.pID与端口号不一样吗? pID&#xff08;Process ID&#xff0c;进程标识符&#xff09;和端口号是不同的概念。 pID是操作系统中用来唯一标识一个正在运行的进程的数字。每个正在运行的进程都会被分配一个唯一的pID&#xff0c;它可以用来追踪和管理进程。 而端口号是在网…

实际工作中通过python+go-cqhttp+selenium实现自动检测维护升级并发送QQ通知消息(程序内测)

说明&#xff1a;该篇博客是博主一字一码编写的&#xff0c;实属不易&#xff0c;请尊重原创&#xff0c;谢谢大家&#xff01; 首先&#xff0c;今年比较忙没有多余时间去实操创作分享文章给大家&#xff0c;那就给大家分享下博主在实际工作中的一点点内容吧&#xff0c;就当交…

Leetcode.1749 任意子数组和的绝对值的最大值

题目链接 Leetcode.1749 任意子数组和的绝对值的最大值 rating : 1542 题目描述 给你一个整数数组 n u m s nums nums 。一个子数组 [ n u m s l , n u m s l 1 , . . . , n u m s r − 1 , n u m s r ] [numsl, numsl1, ..., numsr-1, numsr] [numsl,numsl1,...,numsr−1,…

mysql支持的xa具体指的是什么?

在MySQL中&#xff0c;XA指的是一种事务协议&#xff08;eXtended Architecture&#xff09;&#xff0c;用于支持分布式事务。XA协议允许应用程序跨多个独立的数据库资源&#xff08;例如多个MySQL实例&#xff09;执行分布式事务。 具体来说&#xff0c;XA协议提供了以下关键…

mongoose 解析接口参数

http://127.0.0.1:3003/gt?duration[lte]4 mongoose 查询 lt 小于 lte 小于等于 gt 大于 gte 这些参数可以放在链接里面 let re await M.find(req.query); //method 1let queryObj JSON.stringify(req.query).replace(/\b(lt|lte|gt|gte)\b/g, (match) > $${matc…

容器安全的常见风险与防护实践

运行在云平台上的容器产品&#xff0c;因为具备一个完整的可移植应用程序环境&#xff0c;能够帮助用户轻松地完成对应用程序的开关控制&#xff0c;提升应用程序的敏捷性&#xff0c;同时节约企业的IT建设成本。在巨大优势作用下&#xff0c;容器产品的采用率在2021年达到了新…

小研究 - Mysql快速全同步复制技术的设计和应用(三)

Mysql半同步复制技术在高性能的数据管理中被广泛采用&#xff0c;但它在可靠性方面却存在不足.本文对半同步复制技术进行优化&#xff0c;提出了一种快速全同步复制技术&#xff0c;通过对半同步数据复制过程中的事务流程设置、线程资源合理应用、批量日志应用等技术手段&#…

全栈测试平台推荐:RunnerGo

做软件测试的同学在工作时应该都碰到过这种情况&#xff1a;接口管理、接口测试用postman、Apipost等接口管理工具&#xff0c;性能测试用jmeter、loadrunner等性能测试工具&#xff0c;接口自动化则是jmeter脚本或者python脚本配合jenkins使用。这种情况极大的降低了研发效率&…

RedisTemplate.opsForList()用法简介并举例

RedisTemplate.opsForList()是RedisTemplate类提供的用于操作List类型的方法。它可以用于对Redis中的List数据结构进行各种操作&#xff0c;如添加元素、获取元素、删除元素等。 下面是一些常用的RedisTemplate.opsForList()方法及其用法示例&#xff1a; leftPush&#xff1…