数组 704.二分查找法

news/2024/8/28 20:52:36 标签: leetcode, 算法, 职场和发展

左闭右闭

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

middle = (left + right)/2  与  left+ (right - left)/2 

两个最大值的int类型相加,可能会造成越界,目的是求均值,故先减后加,防止越界

左闭右开

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

一是初始right的取值,当左闭右开时,不包括右边的区间,应该等于nums.length

例如有四个数字,0,1,2,3,左闭右闭 [0,3],左闭右开 [0,4) 才能取到相同的数字

二是 目标在左半区间,因为右开,所以搜索时也不包含右边界,故此时搜索区间应该是[0,middle)

左开右闭 

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

一同上

二 left左区间取值,因为middle = (right + left) /2 是向下取整的,导致后续区间的middle取不对,所以需要middle +1


http://www.niftyadmin.cn/n/5559910.html

相关文章

解决NodeJS控制台输出中文乱码

前言 不知道是系统升级还是Nodejs升级的原因,我从NodeJS19.x升级到20.x后,项目输出的中文就变成了乱码.经测试chcp 65001指令不能有效的解决问题. 于是在AI的加持下得到了这条指令(好用): [Console]::OutputEncoding [System.Text.Encoding]::UTF8在powershell中执行如上指…

docker私有仓库harbor安装

Harbor默认安装 下载harbor https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz 目前要求docker版本&#xff0c;docker 20.10.10-ce &#xff0c;和docker-compose 1.18.0 查看 docker-compose版本 docker-compose --ver…

vue2使用百度地图标记点弹出框添加背景图并且根据数据动态切换

需求&#xff1a;vue2项目使用了百度地图&#xff0c;之后因为原始点标记的弹窗口样式太丑了&#xff0c;之后UI设计了框的样式图片后&#xff0c;替换原有的样式&#xff0c;本文章主要是更改样式和动态切换框的样式 1.参考文档 Vue-Baidu-Map 官方文档百度开放平台 2.效果 …

数据库内核研发学习之路(三)创建postgres内置函数

本章之前已经讲明白了我们的postgres如何进行编译安装&#xff0c;这是很重要的一步&#xff0c;接下来就是学会对postgres进行小的改动&#xff0c;然后保证依然能够顺利编译安装运行&#xff01; 本章续讲内容如何创建一个内置函数。 1、内置函数和用户自定义函数的区别 熟…

List数据的几种数据输出方式

一、问题引入 在Java中&#xff0c;查询List集合是一项常见的任务&#xff0c;它可以通过多种方式实现&#xff0c;以满足不同的需求。下面&#xff0c;List数据的几种数据输出方式。 二、实例 /*** 查询所有用户信息* return*/ List<User> getAllUser(); <select…

论文略读:LoRA Learns Less and Forgets Less

202405 arxiv 1 主要思想 LORA相比于全参数训练&#xff0c;学的少&#xff0c;但忘的也少 2 实验分析 2.1 训练的表现 在编程和数学任务中&#xff0c;LoRA相比全参数微调表现出明显的劣势 2.2 遗忘的表现 这边的遗忘&#xff0c;是指在数据集A上预训练&#xff0c;然后在…

python与Java的异同汇总

文章目录 相同点1.内存机制相似2.类装饰器有点像切面编程3.数据库连接池4.多线程 不同点1.新建文件可以不要class如果一种语言不支持继承&#xff0c;类就没有什么意义。2.多继承 2.很多算法更操作方便1.有计算用的推导式 3.不需要修饰变量&#xff0c;直接用4.import可导入指定…

python安装talib库教程

【talib介绍】 Talib介绍 Talib&#xff0c;全称“Technical Analysis Library”&#xff0c;即技术分析库&#xff0c;是一个广泛应用于金融量化领域的Python库。该库由C语言编写&#xff0c;支持Python调用&#xff0c;为投资者、交易员和数据分析师提供了强大的技术分析工…