二分查找第二弹

news2024/11/29 20:32:39

目录

力扣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

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

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

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

相关文章

java仓库进销存商品库存管理系统springboot+vue

库存管理信息系统研究的内容涉及库存管理的全过程&#xff0c;包括入库、出库、退 货、订货、库存统计查询等等。 根据上述工作流程&#xff0c;库存管理系统将包含以下内容 1&#xff09;登录信息的输入&#xff0c;密码的修改。 2&#xff09;基本信息的输入&#xff0c;包括…

一篇文章搞懂CNN(卷积神经网络)及其所含概念

目录 1. 什么是卷积神经网络&#xff1a;2. 应用领域&#xff1a;3. 架构&#xff1a;4. 卷积层的参数和名词参数&#xff1a;名词&#xff1a; 5. 注意&#xff1a;6. 经典网络&#xff1a;小结&#xff1a; 当下&#xff0c;计算机视觉在人工智能领域中扮演着至关重要的角色。…

【数据分享】1929-2023年全球站点的逐日降雪深度数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 之前我们分享过1929-2023年全球气象站点的逐日平均气温数据、逐日最高气温数据…

基于OpenCV灰度图像转GCode的双向扫描实现

基于OpenCV灰度图像转GCode的双向扫描实现 引言激光雕刻简介OpenCV简介实现步骤 1.导入必要的库2. 读取灰度图像3. 图像预处理4. 生成GCode 1. 简化版的双向扫描2. 优化版的双向扫描 5. 保存生成的GCode6. 灰度图像双向扫描代码示例 总结 系列文章 ⭐深入理解G0和G1指令&…

freeswitch对接FunASR实时语音听写

1、镜像启动 通过下述命令拉取并启动FunASR软件包的docker镜像&#xff1a; sudo docker pull \registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.7 mkdir -p ./funasr-runtime-resources/models sudo docker run -p 10096:10095 -i…

Eclipse 安装使用ABAPGit

Eclipse->Help->Install New software 添加地址 https://eclipse.abapgit.org/updatesite/ 安装完成打开 选择abapGit repositories,先添加仓库 点下图添加自己仓库 如图添加仓库地址 添加完仓库后&#xff0c;点击我的仓库 右键选中行&#xff0c;可以进行push和pu…

WPS Office18.7软件日常更新

【应用名称】&#xff1a;WPS Office 【适用平台】&#xff1a;#Android 【软件标签】&#xff1a;#WPS 【应用版本】&#xff1a;18.6.1➡18.7 【应用大小】&#xff1a;160MB 【软件说明】&#xff1a;软件日常更新。WPS Office是使用人数最多的移动办公软件。独有手机阅读模…

打榜,一个新人是如何做到一天推荐小报童7人的?

这是第一次参加打榜活动&#xff0c;有点小激动&#xff0c;虽然GMV不高&#xff0c;和那些动辄几千上万的大佬没法比&#xff0c;但是其实内在玩法还是相通的 下面就记录一下个人在此次打榜活动中的一些感悟&#xff0c;与君共勉吧~ 先来看下当时的成绩 最后时刻被反超 本…

Python算法100例-1.3 牛顿迭代法求方程根

完整源代码项目地址&#xff0c;关注博主私信’源代码’后可获取 1&#xff0e;问题描述 编写用牛顿迭代法求方程根的函数。方程为 a x 3 b x 2 c x d 0 ax^3bx^2cxd0 ax3bx2cxd0&#xff0c;系数a、b、c、d由主函数输入&#xff0c;求x在1附近的一个实根。求出根后&…

C++STL之容器

STL的概述 STL(Standard Template Library,标准模板库) STL的6大组件&#xff1a;容器、算法、迭代器、适配器、仿函数、空间配置 容器&#xff1a;存放数据 算法&#xff1a;操作数据 迭代器&#xff1a;算法 通过迭代器 操作 容器 适配器&#xff1a;为算法 提供更多的接口 …

电脑/机顶盒/ps3/4/连接老电视(只有AV、S-Video接口)解决方案之HDMI转AV/S-Video转换器HAV

HDMI转AV/S-Video转换器功能 01、将HDMI高清信号经过视频处理转换成AV、S-VIDEO(PAL/NTSC)的视频信号输出 02、将HDMI数字音频&#xff0c;经过DAC数模芯片处理转成模拟立体声输出 03、采用先进的视频处理技术&#xff0c;对图像的亮度&#xff0c;对比度及色彩进行增强处理 04…

AI重构千行百业!超声波俱乐部大湾区内部分享会圆满落幕

1月27日、28日&#xff0c;超声波俱乐部内部分享会第十六期、第十七期分别在深圳、广州召开&#xff0c;创梦天地、元气森林、新浪智库、百准、A2空间对活动进行了特别支持&#xff0c;六十余名AI领域的创始人和行业嘉宾出席分享会。 出席活动的嘉宾有&#xff1a; 超声波创始…

使用java -jar命令运行jar包提示“错误:找不到或无法加载主类“的问题分析

用maven把普通java项目打包成可运行的jar后&#xff0c;打开cmd用java -jar运行此jar包时报错&#xff1a; 用idea运行该项目则没有问题 。 其实原因很简单&#xff0c;我们忽略了2个细节。 java指令默认在寻找class文件的地址是通过CLASSPATH环境变量中指定的目录中寻找的。我…

数据中心机房建设的痛点:投资与运维之间的博弈

在数字化浪潮的推动下&#xff0c;数据中心机房建设成为企业发展不可或缺的一环。然而&#xff0c;这一过程中存在一系列的痛点&#xff0c;其中投资与运维之间的博弈成为机房建设的重要议题。本文将深入探讨机房系统建设中的投资及运行维护痛点&#xff0c;并提出相关观点和建…

Vulnhub靶机:hacksudo2 (HackDudo)

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hacksudo2 (HackDudo)&#xff08;10.0.2.44&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnh…

最新酒桌小游戏喝酒骰子小程序源码/带流量主

2023最新酒桌小游戏喝酒小程序源码-带流量主&#xff0c;喝酒神器3.6修改增加了广告位&#xff0c;直接上传源码到开发者端即&#xff0c;可通过后改广告代码&#xff0c;然后关闭广告展示提交&#xff0c;通过后打开即可。 流量主ID替换插屏广告位 adunit-29629a7b54a41a8b视频…

假期day3,三种进程间通信代码实现(2024/2/4)

消息队列 #include<myhead.h> struct msgbuf{long mstype;char text[1024]; };#define SIZE (sizeof(struct msgbuf)-sizeof(long))int main(int argc, const char *argv[]) {int pid;//创建key值key_t keyftok("/",a);if(key -1){perror("creat key&quo…

033 三种初始化及内存分析

三种初始化 内存分析 创建数组后存储解析

租号平台源码 支持单独租用或合租使用

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买) 这是一款租号平台源码,采用常见的租号模式。目前网络上还很少见到此类类型的源码。 平台的主要功能如下: 支持单独…

CTFshow 5——23

借鉴博客 misc5 下载完后&#xff0c;用winhex打开 在最后就可以找到flag misc6 和misc5一样 &#xff08;推测&#xff1a;可能是jpg这种看得见的图片&#xff0c;用winhex&#xff09; misc7 misc8 前置工具安装 这里可以看看见两个png 然后我们在我们的文件夹里面有个…