二分查找第二弹

目录

力扣852.山脉数组的峰顶索引 

力扣162.寻找峰值

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

力扣剑指Offer53.0-n-1缺失的数字


力扣852.山脉数组的峰顶索引 

峰顶之前的全部比他小,峰顶之后的也比他小,把小于等于和大于分成两段

class Solution {
    public int peakIndexInMountainArray(int[] arr) {
        //第一个和最后一个都不是峰值
      int left=1;
      int right=arr.length-2;
      while(left<right){
          int med=left+(right-left+1)/2;
          if(arr[med]>arr[med-1]){
              left=med;
          }else{
              right=med-1;
          }
      }
          return left;
      
    }
}

力扣162.寻找峰值

暴力解法,从第一个位置开始,一直向后面走,然后分类讨论即可。

这种没有顺序的,我们该如何使用二分呢?

二段性

峰值一定一个在左边,另一个一定在右边

代码怎么写,怎么规定是我们决定的,你的思想决定你的想法。

这里我其实一直区分不出来什么时候是+1,-1什么时候是正好=med,我的想法是,你看你需要什么,这道题是要求峰值,峰值一定是最大的那个是数字,那么假如代码里面x>m

你肯定是要保留这个x,那么你就让right/left=x,因为你是要保留大的,反之也一样

class Solution {
    public int findPeakElement(int[] nums) {
    int left=0;
    int right=nums.length-1;
    while(left<right){
        int med=left+(right-left)/2;
        if(nums[med]>nums[med+1]){
            right=med;
        }else{
            left=med+1;
        }}
        return left;
    }
}

方法2:(一样的思想,只不过操作不同,但是大同小异罢了)

class Solution {
   public static int findPeakElement(int[] nums) {
        int left=0;
        int right=nums.length-1;
        while(left<right){
            int med=left+(right-left+1)/2;
            if(nums[med]>nums[med-1]){
                left=med;
            }else{
                right=med-1;
            }}
        return left;
    }
}

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

以D为参照点,如果说我的nums[n-1]是这个D点,那么比D点大的,就一定要往右边去(因为右边较小),比D小的就一定往左边来。(假如D是最大的,那么他就会一直往左边走,也是符合理想的)

那我我们想一想,假如说是以A为参照点,我们该怎么办呢?,nums[mid]比A大,那么就是right放在mid的右边,假如比A小那么left去找mid的右边

以D为参照点,推荐是以D为参照点处理,推荐,以D为参照点,划分的更加明确,是比D大,和比D小两个阶段,比D大,就可以直接往左边移动到比D小的,比D小,可以往左移动看有没有比D更小的。

class Solution {
    public int findMin(int[] nums) {
        int left=0;
        int right=nums.length-1;
        int x=nums[nums.length-1];
     for(int i=0;i<nums.length;i++){
         int mid=left+(right-left)/2;
         if(nums[mid]>x){
             left=mid+1;
         }else{
             right=mid;
         }
     }
    
     return nums[left];
    }
}

一样的原理,但是有特殊情况

以A为参照点处理。

两点细节,比D点为参照点多两个条件

  public static int findMin(int[] nums) {
        int left=0;
        int right=nums.length-1;
        int x=nums[0];
        if(nums.length==1){return nums[0];}
        if(nums[0]<nums[right]){
            return nums[0];
        }
        for(int i=0;i<nums.length;i++){
            int mid=left+(right-left)/2;
            if(nums[mid]>=x){
                left=mid+1;
            }else{
                right=mid;
            }
        }

        return nums[left];
    }

力扣剑指Offer53.0-n-1缺失的数字

直接拿事例理解

[0,1,3]缺少一个2

[0,1,2,3,4,5,6,7,9]缺少一个8

​​​​​​​​​​​​​​

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

TQ15EG开发板教程:使用vivado2023.1建立hello world工程

1:打开软件建立工程 2:使用vivado创建设计模块并生成bit文件 3:导出硬件平台&#xff0c;使用vitis建立工程 4:使用vitis创建应用程序项目 5:硬件设置与调试 1:打开软件建立工程 打开VIVADO2023.1 创建一个新的工程 输入项目名称和地址&#xff0c;下面那个选项为是否…

深入了解关联查询和子查询

推荐阅读 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;一&#xff09; 给软件行业带来了春天——揭秘Spring究竟是何方神圣&#xff08;二&#xff09; 文章目录 推荐阅读关联查询子查询 关联查询 关联查询 从多张表中查询对应记录的信息&#xff0c;关联查…

网络原理-TCP/IP(5)

TCP协议 延迟应答 它也是基于滑动窗口,提高效率的一种机制,结合滑动窗口以及流量控制,能够以延迟应答ACK的方式,把反馈的窗口,搞大.核心在于允许范围内,让窗口尽可能大. 如果接收数据的主机立刻返回ACK应答,这时候返回的窗口可能比较小. 1.假设接收端缓冲区为1M.一次收到了5…

Java特别篇--关于线程创建的三种方式的总结对比

文章目录 一、常见3种创建线程的方式&#xff08;1&#xff09;方式1&#xff1a;继承Thread类的方式&#xff08;2&#xff09;方式2&#xff1a;实现Runnable接口的方式&#xff08;3&#xff09;方式3&#xff1a;通过Callable和Future接口创建线程 二、对比三种方式&#x…

CUDA/TensorRT部署知识点

CUDA相关: 1、CUDA核函数嵌套核函数的用法多吗? 答:这种用法非常少,主要是因为启动一个kernel本身就有一定延迟,会造成执行的不连续性。 2、如下代码里的 grid/block 对应硬件上的 SM 的关系是什么? 答:首先需要理解grid/block是软件层的概念,而SM是硬件层的概念。所…

python脚本将照片按时间线整理

说明&#xff1a;有一次自己瞎折腾&#xff0c;然后把服务器相册搞崩了&#xff0c;后来做了备份同步给找了回来&#xff0c;但是相册的时间线全乱了&#xff0c;看起来非常难受。所以就想通过文件夹的形式把照片重新分类&#xff0c;分类后的结构如下(红色字体为文件夹)&#…

人生百相,不过熵增熵减

这篇博文由两个问题衍生而来&#xff0c;分别是&#xff1a;“为什么除法比加法困难”、“什么是生命进化的目的”。在阅读其他人的解读时&#xff0c;发现都关联到了一个概念&#xff0c;熵。觉得十分有意思&#xff0c;因此记录一下自己的遐想。 熵&#xff08;Entropy&#…

vulhub中spring的CVE-2022-22965漏洞复现

在JDK 9上运行的Spring MVC或Spring WebFlux应用程序可能存在通过数据绑定执行远程代码&#xff08;RCE&#xff09;的漏洞。 现在已知的利用方法要求应用程序以WAR部署的形式在Tomcat上运行&#xff0c;然而&#xff0c;该漏洞的性质更为普遍&#xff0c;可能有其他方法可以利…

docker安装-centos

Docker CE 支持 64 位版本 CentOS 7&#xff0c;并且要求内核版本不低于 3.10 卸载旧版本Docker sudo yum remove docker \ docker-common \ docker-selinux \ docker-engine使用yum安装 yum 更新到最新版本: sudo yum update执行以下命令安装依赖包&#xff1a; sudo yum…

【无刷电机】无感方波驱动方案

无感方波驱动方案 1.通过无感过零信号构造霍尔换相信号2.无刷硬件驱动方案3.无感方波控制程序框架3.1有感方波控制3.2无感方波控制3.3无感启动方案3.4无感速度闭环控制1.通过无感过零信号构造霍尔换相信号 实现无感方波控制有软件比较和硬件比较两种方案。 软件比较是通过ADC采…

张维迎《博弈与社会》威胁与承诺(3)承诺行为

承诺的作用 上一节&#xff0c;我们探讨了如何在求解博弈时把不可置信的威胁或许诺排除出去&#xff0c;从而对参与人的行为做出合理的预测。如前所述&#xff0c;其中一个隐含的前提条件是&#xff0c;参与人要具有理性共识。而理性共识是一个要求很高的条件&#xff0c;现实生…

基于Springboot的校园失物招领网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的校园失物招领网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

基于Springboot的兼职网(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的兼职网&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0…

Oracle喊你领取免费AI 助理级证书啦!

拿证秘籍如下&#xff1a; 1. 登录Oracle的考试中心网站&#xff1a;https://education.oracle.com/certification 2. 选择AI 助理级考试&#xff0c;考试代码&#xff1a;1Z0-1122-23&#xff0c;也可以点击这里直达 3. AI学习视频免费看&#xff0c;也可以选择不看 3.5 去…

【git 本地管理版本及与github合并】 Init Push Pull操作解决方案

文章目录 创建本地仓库&#xff0c;并与远程仓库链接更新本地仓库并使用Push推送到远程仓库 1. 几种基础命令介绍&#xff1a;2. git push操作流程 .gitignore删除本地仓库&#xff0c;断开本地与远程的链接设置用于提交commit的用户名&#xff0c;邮箱&#xff0c;以便githu…

自建服务器监控工具uptime kuma

web服务器使用 雨云 提供的2核2g 这里使用1panel的uptime kuma 首先&#xff0c;如果你使用雨云&#xff0c;那么可以直接省去安装1panel的烦恼 直接选择预装后&#xff0c;等待部署完成即可看到面板信息&#xff0c;进入面板&#xff0c;点击应用商店 在应用商店里找到upti…

安装配置Oracle 11g 、PLSQL及使用Navicat远程连接Oracle

目录 一、下载 二、安装 1.执行安装程序 2.配置安全更新 3.安装选项 4.系统类 5.网络安装选项 6.选择安装类型 7.选择产品语言 8.选择数据库版本 9.指定安装位置 10.选择配置类型 ​编辑11.指定数据库标识符 12.指定配置选项 13.电子邮箱 14.指定数据库存储…

Android学习之路(28) 进程保活组件的封装

前言 远古时代&#xff0c;出现过很多黑科技&#xff0c;比如MarsDaemon&#xff0c;使用双进程守护的方式进行保活&#xff0c;在当时可谓风光无限&#xff0c;可惜在8.0时代到来就被废弃了。 又比如后面出现的1像素Activity的保活方式&#xff0c;说他流氓一点不过分&#…

解决Android camera 录像中拍照帧率不足30fps

问题现象 camera录像中拍照&#xff0c;录出来的视频帧率为29.3fps&#xff0c;未达到30fps。 问题分析 这个场景相当于跑了previevediocapture&#xff0c;极其损耗性能。 当前场景CPU频率已处于最高。 抓取systrace分析。 1&#xff0c;分析掉帧直接原因 SinkNode存在大…

【Leetcode】第 383 场周赛

文章目录 100214. 边界上的蚂蚁题目思路代码结果 100204. 将单词恢复初始状态所需的最短时间 I题目思路代码结果 100189. 找出网格的区域平均强度题目思路代码结果 100203. 将单词恢复初始状态所需的最短时间 II题目思路代码结果 100214. 边界上的蚂蚁 题目 题目链接 给你一个…