首页 > 其他分享 >2.二分查找新方法

2.二分查找新方法

时间:2023-02-16 16:12:08浏览次数:59  
标签:二分 right return nums mid 查找 方法 left

2.二分查找

目录


2.1新方法

近日重写二分查找的算法题还是倍感疑惑,在边界问题上还是有问题。在B站学习的时候,学到了一种新的理解方法。以下是伪代码:

l = -1, r = N
while l+1 ≠ r
    m = (l + r) / 2
    if isBlue(m)
        l = m
    else 
        r = m
return l or r

伪代码

  • 边界条件:$ l+1 \ne r$
  • mid 一定有效,取值范围[0, n)
  • 初始边界在数组外,(l, r) = (-1, N)

这种方法使左右指针像刷子一样快速遍历整个数组


2.2 例子

在leetcode试着使用了这种方法,感觉还蛮好理解的

162. 寻找峰值


给你一个整数数组 nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回 任何一个峰值 所在位置即可。

你可以假设 nums[-1] = nums[n] = -∞ 。

你必须实现时间复杂度为 O(log n) 的算法来解决此问题。

原题


代码:

class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int left = -1;
        int right = nums.size();
        if (right == 1) return 0;
        if(right == 2){
            if(nums[0]>nums[1])
                return 0;
            else
                return 1;
        }

        while(left + 1 != right) {
            int mid = left + (right - left) / 2;
            if (mid != nums.size() - 1 && nums[mid] < nums[mid + 1]){
                left = mid;
            } else {
                right = mid;
            }
        }
        return right;
    }
};

试了一下accept了


原视频


sigma

标签:二分,right,return,nums,mid,查找,方法,left
From: https://www.cnblogs.com/romgk-blog/p/17127123.html

相关文章

  • linux下只显示文件或是文件夹的方法
    在处理文件相关操作的时,我们可能会用到只显示文件或者是只显示文件夹的功能,可以使用如下命令来实现:只显示文件ls-l|grep^[^d]|awk'{print$8}'1.其中ls-l就......
  • 数据类型及常用方法
    目录引入一、整型int二、浮点型float三、字符串类型str四、列表list五、字典dict六、布尔值bool七、元组tuple八、集合set引入我们学习变量是为了让计算机能......
  • winpcap4.1.3无法安装的解决方法
    报错提示:  解决方法:可以利用everything找到相应文件,扩展名修改成如下:C:\Windows\SysWOW64的wpcap.dll改成wpcap.dll.old(这个有可能找不到)C:\Windows\SysWOW64的p......
  • python3常用模块和方法
    1、使用索引反转字符串str="hello"print(str[::-1])2、zip函数获取可迭代对象,将它们聚合到一个元组中,然后返回结果。语法是zip(*iterables)numbers=[1,2,3]strin......
  • 根据Query的名字查找是那个CLF逻辑中使用
    selectcdodefinition.cdoname,CLFeventMap.Name"Method",CLFDefinition.CLFNAMECLF--,CLFSource.CLFNAMECLFCopySource,functiondefinition.NAMEFunctionName,fu......
  • CAN总线错误帧及排查方法简介
    前言  CAN帧有多种格式,错误帧作为CAN帧中独特的一种,了解其作用,类型与产生原因,对于进行测试以及开发有很大的帮助,本文将对错误帧的相关基础知识以及后续的分析排查进行......
  • 拦截器HandlerInterceptorAdapter使用方法
    原文链接:https://blog.csdn.net/kuishao1314aa/article/details/109777304一、Interceptor定义:拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个......
  • C#调用usb摄像头的实现方法
    C#调用usb摄像头的实现方法2022-11-0112:32Danna_Li C#这篇文章主要介绍了C#调用usb摄像头的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定......
  • java字符串之间的拼接方法
    在java开发中,有很多时候,需要把一个集合或者数组中的数据进行拼接,拼接成一个全新格式的字符串,这时候就用到了java中的一些方法,方法如下:一、Joiner-guava点击查看代码/......
  • php7.3.4 pdo方式连接sqlserver 设置方法
    我这边用的php是7.3.4版本的,大家设置的时候看一下。一、首先要开启php的sqlsrv扩展1.下载SQLSRV58.EXE,我的php版本是7.3.4https://docs.microsoft.com/en-us/sql/conne......