【LeetCode刷题笔记】1.二分查找(704)

【车载开发系列】ParaSoft单元测试环境配置(一) bdf是数据文件的一种类型,表示一种数据库文件。在ParaSoft当中,可以使用bdf文件来快速创建一个测试项目。 阅读详情

题目

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9     
输出: 4       
解释: 9 出现在 nums 中并且下标为 4     

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2     
输出: -1        
解释: 2 不存在 nums 中因此返回 -1        

提示:

  • 你可以假设 nums 中的所有元素是不重复的。
  • n 将在 [1, 10000]之间。
  • nums 的每个元素都将在 [-9999, 9999]之间

思路

想到二分查找的关键词:有序数组,数组中无重复元素

最朴素的二分查找题目,但二分查找有两个基本的难点:

  • 最外层的while循环条件是low < high 还是 low<=high?

  • 修改判断区间时是 high = mid 还是 high = mid - 1?

实际上由二分查找的区间决定,这个区间在整个查找过程中是不变的,也叫做循环不变量

  1. 左闭右闭区间,即 [ low,high ]

    看low == high 是否可以取到,在这里是取得到的,举极端例子[1,1]的区间,1 == 1.

    故循环条件可以有等号,即 left<=right

    修改时,假设修改high,因为右闭,high可以取得到,故修改时不能有刚刚已经判断过的mid,即

    修改为 high = mid -1 ,此时high初始值为nums.size() -1 也是这个道理

  2. 左开右闭区间,[low,high)

    [1,1)有矛盾,low == high 不可以取到,故写 low<high

    high取不到,写 high = mid ,即使mid已经判断过,下次判断时mid也不在判断区间内

    此时high初始值为nums.size()

题解

  • 左闭右闭写法

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            int mid, low = 0, high = nums.size() - 1;
            while (low <= high) {
                mid = (low + high) / 2;
                if (nums[mid] > target) {
                    high = mid - 1;
                }
                else if (nums[mid] < target) {
                    low = mid + 1;
                }
                else if (nums[mid] == target) {
                    return mid;
                }
            }
            return -1;
        }
    };
    
  • 左闭右开写法

    class Solution {
    public:
        int search(vector<int>& nums, int target) {
            int mid, low = 0, high = nums.size();
            while (low < high) {
                mid = (low + high) / 2;
                if (nums[mid] < target) {
                    low = mid + 1;
                } else if (nums[mid] > target) {
                    high = mid;
                } else
                    return mid;
            }
            return -1;
        }
    };
    
深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总 本文简要介绍深度学习的前向传播与反向传播,以及前馈神经网络与反馈神经网络。 阅读详情

相关推荐

Codesys电子凸轮从入门到应用:手把手教你用MC_CamIn/MC_CamOut实现主从轴同步

本文详细介绍了如何在Codesys平台上使用MC_CamIn和MC_CamOut功能块实现电子凸轮的主从轴同步控制。从环境配置、轴使能到凸轮表创建与动态切换,提供了完整的程序编写指南和调试技巧,帮助工程师快速掌握工业自动化中的高精度运动控制技术。

weixin_26878995的博客 277

刷题日记 Day 1 : Leetcode 704 二分查找以及 Leetcode 27 移除元素

题目链接 :34. 在排序数组中查找元素的第一个和最后一个位置大家可以自行完成 , 后续我也会把这道题的解题思路以及代码更新。

m0_53117341的博客 1141

ARM架构实战:在鲲鹏920服务器上用Debian12部署PVE虚拟化平台

本文详细介绍了在基于ARM架构的华为鲲鹏920服务器上,以Debian 12为底层系统,部署Proxmox VE(PVE)虚拟化平台的完整实战流程。文章重点解析了ARM64架构下PVE软件源的配置、内核安装的注意事项、部署后网络与存储的调优,并提供了针对ARM虚拟化环境的性能优化建议,为在国产化硬件上构建稳定高效的虚拟化环境提供了宝贵经验。

efc12345678的博客 780

leetcode刷题(1)704. 二分查找

题目链接: 704.二分查找 二分法思路:AcWing 算法基础课笔记【基础算法篇】2.整数二分与浮点数二分 时间复杂度为O(logn)O(logn)O(logn),空间复杂度O(1)O(1)O(1) 同样使用了二分法,时间复杂度为O(logO(logO(log n)n)n),空间复杂度O(1)O(1)O(1) 同类题目: AcWing 789.数的范围

jackywiki的博客 1060

思科模拟器实战:MQTT协议实现物联网设备通信全流程解析

本文详细解析了如何在思科模拟器中利用MQTT协议实现物联网设备通信的全流程。通过搭建网络拓扑、配置MQTT Broker与客户端,并编写发布/订阅逻辑,手把手指导读者完成一个“开关控制电灯”的经典物联网场景实验,帮助零成本掌握物联网通信核心。

weixin_29294975的博客 381

ADS2020实战:手把手教你搭建交叉耦合VCO并分析相位噪声(附避坑指南)

本文以ADS2020软件为例,提供了交叉耦合压控振荡器(VCO)从原理图搭建到相位噪声分析的完整实战指南。详细讲解了核心器件选择、谐波平衡与瞬态仿真的关键设置,并重点剖析了相位噪声的仿真方法与优化方向。文中附有详细的避坑指南,帮助初学者和工程师高效完成VCO设计与仿真验证,避免常见错误。

p5l2m9n4o6q的博客 277

1.力扣刷题之二分查找

写二分法,区间的定义主要是两种,左闭右闭即[left,right]或者左闭右开[left,right).二分法应该是我们刚学编程时最早遇到的算法题,思想很简单,代码也不困难,但是当中的边界问题,很容易出错。这些都是使用二分法的前提条件,当我们看到这些字眼的时候,就要想一下是不是能用二分法。下面就跟大家一起用这两种写法来解题。

m0_58367586的博客 2822

基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(三)SD卡驱动、FatFS等的移植和ini配置文件读取的实现

本文实现了基于STM32F107VC的金牛开发板的基于SPI模式的SD卡驱动和FatFS的移植,以及利用minini库对ini配置信息文件进行读取。

sqshining的专栏 2137

leetcode(力扣)刷题笔记(c++、python)【上】

力扣刷题顺序以及用不同语言解答过程

qq_43050258的博客 3698

底层软件测试规范,QA评审底层测试

本文首发于【林子的空间】“林子,咱们上次讨论的高效Desk check清单,用起来还挺好的,最近我们组每次Desk check变得顺利多了,Dev也是越来越熟练。”玥玥跟我说。“真好!我们组感觉也是这样!”“不过,我听小慧说他们组有人对QA review UT提出了一些concern(质疑),觉得QA review的价值不大,基本都是Dev给讲一遍,QA也提不出来什么反馈...”玥玥补充说道。“哦...

weixin_42144707的博客 1188

ZY1-02D (ZY1E)多光谱数据预处理

资源一号02D卫星(5米光学卫星)于2019年9月12日成功发射,卫星搭载的两台相机,可有效获取115公里幅宽的9谱段多光谱数据以及60公里幅宽的166谱段高光谱数据,其中全色谱段分辨率可达2.5米、 多光谱为10米、高光谱优于30米,高光谱载荷可见近红外和短波红外光谱分辨率分别达到10纳米和20纳米。

热爱分享,热爱记录 4827

【ARTS】【LeetCode-704】二分查找算法

ARTS之算法题

qq_59670390的博客 1564

GStreamer —— 2.1、Windows搭建GStreamer环境,Qt加载GStreamer库后运行 - “教程1:Hello world!“(附:完整源码)

GStreamer —— 2、Windows搭建GStreamer环境,Qt加载GStreamer库后运行"教程1:Hello world!"

796

【LeetCode题目详解】704.二分查找,27. 移除元素 day1

【LeetCode题目详解】704.二分查找,27. 移除元素(双指针法)

weixin_67972246的博客 4607

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

LeetCode题解:704.二分查找

本篇文章,利用leetcode中最经典的二分查找,带大家了解了分析这类问题的基础模版,我们称它为模版I,看过我的二分法总结的同学应该知道,凭借这套模版以及对应的分析,类似的easy问题应该难不住你了。

余光的博客 4523

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

力扣刷题路线

结合高频题、经典题和算法思想学习建议,分阶段从基础到进阶编排,覆盖所有核心标签,并标注题号与学习方法。:画图模拟快慢指针移动,如移动零时快指针探路、慢指针标记非零位置。:括号生成时,左括号数不能超过n,右括号数不能超过左括号数。:LCA问题中,若左右子树均含目标节点,则当前节点为祖先。:终止条件、递归调用、返回值,如二叉树深度递归返回。:掌握虚拟头节点、递归反转、环形检测。:掌握索引操作、快慢指针、滑动窗口。:熟悉括号匹配、单调栈、层序遍历。:熟悉反转、哈希统计、回文处理。

FAQEW的博客 1819

Leetcode刷题笔记1:数组基础1

一开始令两个指针都为0,然后,先移动fast,如果nums[fast]不是要删除的值val,那么移动slow,然后将fast位置的值赋给slow位置。双指针(Two Pointers):指的是在遍历元素的过程中,不是使用单个指针进行访问,而是使用两个指针进行访问,从而达到相应的目的。对于第一种闭区间的情况,由于左右都可以取到,所以while中的判断条件应该是 left

u011426236的博客 1098

刷题leetcode——数组1

要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是。

weixin_71184753的博客 1209

冲冲冲,力扣javascript刷题——数组总结

阶段性力扣刷题总结,为秋招做准备~

qq_41040989的博客 1448

力扣LeetCode704:二分查找

力扣704:二分查找三种解法

diemeng9339的博客 685

力扣刷题35,数组——二分查找704相似题

属于简单题,第一次做,感觉题目就是比704多了一小步,但是自己的思路设计复杂了,多加了一个for循环,说明完全没有注意到二分查找的终止条件是什么。二分查找不仅用于查找,还能用于定位某种性质的边界点这类问题是典型的“寻找第一个 ≥ target 的位置”,属于二分查找的一个经典变体。解题思路:先明确是否找得到,找不到的时候要考虑临界情况是什么。

Betty_textbook的博客 825

Offer必备算法03_二分查找_八道力扣OJ题详解(由易到难)

Offer必备算法03_二分查找_八道力扣OJ题详解_力扣704+力扣34+力扣69+力扣35+力扣852+力扣162+力扣153+力扣LCR173。

参考书籍:《C语言程序设计》《数据结构》《C++ Primer》《Effective C++》《STL源码剖析》《现代操作系统》《UNIX环境高级编程》《图解TCP/IP》《图解HTTP》《Linux高性能服务器编程》《剑指Offer》《算法导论》 1659

【代码随想录训练营 day1|LeetCode704、LeetCode27、LeetCode977】

今天主要学习了二分法和双指针法,理解了二分法的核心要点在于区间判断和下一次区间选择上;双指针法的快慢指针的定义。今天是训练营第一天,加油,坚持打卡。

qq_44639909的博客 1440

LeetCode刷题day1——704二分查找

二分法

nosnef的博客 562

LeetCode704. 二分查找

二分查找算法解析:针对有序数组查找目标值,重点在于区间定义。

m0_54096850的博客 1845

力扣704. 二分查找(顺序查找)

力扣704. 二分查找 https://leetcode-cn.com/problems/binary-search/ 给定一个n个元素有序的(升序)整型数组nums 和一个目标值target ,写一个函数搜索nums中的 target,如果目标值存在返回下标,否则返回 -1。 思路:有序,就是顺序查找,最简便的是二分查找 我的VS代码: #include "std...

小麦China的博客 565

Leetcode 704 二分查找

Leetcode 704 二分查找 题目描述: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例1: 输入: nums = [-1,0,3,5,9,12], target = 9 输出: 4 解释: 9 出现在 nums 中并且下标为 4 示例2: 输入: nums = [-1,0,3,5,9,12], target = 2 输出: -1 解释: 2 不存在 nums 中因此返

周泡泡同学的博客 1100
上一篇: 【Java】韩顺平Java 学习笔记 第13章 常用类
下一篇: 【LeetCode刷题笔记】2.搜索插入位置(35)3.x的平方根(69)4.有效的完全平方数 5.在排序数组中查找元素的第一个和最后一个位置(34)
COTAS
博客等级 码龄7年 369粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值