当前位置: 首页 > article >正文

leetcode704--二分查找(二分查找的两种写法)

leetcode704–二分查找

二分查找第一种写法

定义target在一个左闭右闭的区间里,[left,right]
区间的定义决定了二分法的代码应该怎么写,因为定义target在[left,right]中,所以:

  • while(left<=right)要是有<=,因为left==right是有意义的。
  • if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1
class Solution {
    public int search(int[] nums, int target) {
        int left=0,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){
                left=mid+1;
            }else{
                return mid;
            }
        }
        return -1;
    }
}

二分查找第二种写法

如果说定义 target 是在一个在左闭右开的区间里,也就是[left, right) ,那么二分法的边界处理方式则截然不同。

有如下两点:

  • while (left < right),这里使用 < ,因为left == right在区间[left, right)是没有意义的
  • if (nums[middle] > target) right 更新为 middle,因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]
class Solution {
    public int search(int[] nums, int target) {
        int left=0,right=nums.length;
        while(left<right){
            int mid=left+(right-left)/2;
            if(nums[mid]>target){
                right=mid;
            }else if(nums[mid]<target){
                left=mid+1;
            }else{
                return mid;
            }
        }
        return -1;
    }
}

http://www.kler.cn/news/329198.html

相关文章:

  • 【web安全】——XSS漏洞
  • 【递归】9. leetcode 104 二叉树的最大深度
  • 位运算(4)_丢失的数字
  • React 的 useId 怎么使用
  • C#参数数组params的使用方法
  • UDP校验和计算及网络中的校验和机制
  • Arthas sc(查看JVM已加载的类信息 )
  • 构建electron项目
  • SpringBoot驱动的墙绘艺术在线展示平台
  • 【Linux】几种常见配置文件介绍
  • 英语词汇小程序小程序|英语词汇小程序系统|基于java的四六级词汇小程序设计与实现(源码+数据库+文档)
  • smb文件夹共享设置
  • 软件测试——Python和UnitTest框架
  • 【Router】路由功能之MAC地址过滤(MAC Filter)功能介绍及实现
  • 用友U8-CRM fillbacksettingedit.php SQL注入复现
  • 【C++】多态,虚函数,重载,重写,重定义,final,override,抽象类,虚函数表,动态绑定,静态绑定详解
  • Web安全 - 路径穿越(Path Traversal)
  • 头号积木玩家——软件工程专业职业生涯规划报告
  • Python知识点:如何使用PyO3进行Rust扩展
  • 后端开发如何提高项目系统的性能
  • B树、B+树
  • 爬虫入门 Selenium使用
  • SQL Server 2012 ldf日志文接太大的截断和收缩日志处理
  • Oracle 时间计算
  • Django一分钟:DRF ViewSet烹饪指南,创建好用的视图集
  • HTML+CSS 水滴登录页
  • C# 相等性检测方法差异分析(==,Equals,ReferenceEquals)
  • Kafka和RabbitMQ比较
  • LSTM模型实现光伏发电功率的预测
  • 滚雪球学MySQL[2.2讲]:基本数据操作详解:插入、查询、更新与删除