二分查找(easy)

更好的阅读体验应该是:

  1. 审题-思考
  2. 答题
  3. 整理-归纳

一、题目

LeetCode:704.二分查找

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

示例:

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

你可以假设 nums 中的所有元素是不重复的。

二、二分法解题

二分查找是一种基于比较目标值和数组中间元素的教科书式算法。

  • 如果目标值等于中间元素,则找到目标值。
  • 如果目标值较小,继续在左侧搜索。
  • 如果目标值较大,则继续在右侧搜索。

时间复杂度:O(logN)
空间复杂度:O(1)

模版 I

  1. 确定初始的左右边界:

    • left: 0
    • right: nums.length-1
    • mid: (left + right) >> 1
  2. 如果中间元素值nums[mid] < target:证明中间值左侧包括中间值都不符合要求,可以直接排除,left = mid + 1
  3. 如果中间元素值nums[mid]:证明中间值右侧包括中间值都不符合要求,可以直接排除,right = mid - 1
  4. 如果中间元素值nums[mid] = target:直接返回mid的下标
  5. 重新定义了左右边界,也需要重新计算中间值,我们需要继续进行范围的排除
  6. 定义搜索的条件,应该是搜索区间都不为空,即left <= right

Javasciprt 代码

var search = function(nums, target) {let left = 0; // 初始左边界let right = nums.length - 1; // 初始右边界// 如果left > right 证明整个数组结束了仍没有找到目标值while (left <= right) {let mid = left + Math.floor((right - left) / 2); //防止溢出if (target === nums[mid]) {return mid;} else if (target > nums[mid]) {// 目标值大于中值,则中间左侧可以抛弃了left = mid + 1;} else {// 目标值小于中值,则中间右侧可以抛弃了right = mid - 1;}}return -1;
};

三、写在最后

上面的代码就是二分法模板 I,看过我的二分法总结的同学应该知道,凭借这套模版以及对应的分析,类似的问题应该难不住你了。

如果对你有所帮助不妨给本项目的github 点个 star,这是对我最大的鼓励。

关于我

  • 花名:余光
  • WX:j565017805
  • 沉迷 JS,水平有限,虚心学习中

其他沉淀

  • Github:JavaScript 版 LeetCode 题解
  • 在线版:前端进阶笔记
  • CSDN博客汇总

LeetCode题解:704.二分查找相关推荐

  1. LeetCode No.704 二分查找 No.27移除元素

    LeetCode No.704 二分查找 题目描述: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在 ...

  2. LeetCode Algorithm 704. 二分查找

    704. 二分查找 Ideas 这题想考察二分查找的来着. 对不起,真的对不起,作为Python爱好者,实在没忍住,就一行代码解决了. Code Python from typing import L ...

  3. leetcode系列--704.二分查找

    leetcode系列–第704题.二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否 ...

  4. JS刷题第一天| 704. 二分查找、27. 移除元素

    704. 二分查找 题目链接:力扣 文章讲解:代码随想录 视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili 看 ...

  5. Leetcode 704.二分查找 27.移除元素 代码随想录day1

    本系列目的在于跟练代码随想录,以及记录自己在数据结构与算法方面的一些学习 704.二分查找 其实之前自己在随便刷题的时候看过这道题目,就是一个纯新手的大状态,第一次听到二分查找这样的东西,然后跟着题解 ...

  6. [LeetCode]704.二分查找及相关题目

    数组理论基础 数组理论 数组是存放在连续内存空间上的相同类型数据的集合 数组可以方便的通过下标索引的方式获取到下标下对应的数据 二维数组在内存的空间地址是连续的 二分查找 LeetCode 704.二 ...

  7. C#LeetCode刷题-二分查找​​​​​​​

    二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  8. 代码随想录01 | 704二分查找和27移除元素

    目录 一 .二分查找 1 二分查找 2 搜索插入位置 3  在排序数组中查找元素的第一个和最后一个位置 二.移除元素 一 .二分查找 1 二分查找 704 二分查找https://leetcode.c ...

  9. Suzy找到实习了吗 Day 1 | 704. 二分查找、27. 移除元素

    Suzy找到实习了吗 | 704. 二分查找.27. 移除元素 Leetcode 704:二分搜索 收获 Divide and conquer Recursive relation Python 3 ...

最新文章

  1. 【转】ExtJS DateField 日期控件Format格式化
  2. python模块初始与time、datetime及random
  3. 直接点不玩虚的--启明云端千元现金红包、50pcs开发板直播现场拿走不谢
  4. Java学习笔记(7)——输入输出
  5. 【转】75个最佳Web设计资源
  6. win7记事本txt图标显示异常解决方法
  7. Nginx 静态页面POST 请求提示405 Not Allowed
  8. 28. HTTP、SSL/TLS和HTTPS协议的区别与联系
  9. setuna截图软件怎么用_苹果手机笔记怎么做?用哪款笔记软件好
  10. tomcat7下载安装
  11. 八位超前进位加法器八位行波进位加法器
  12. mouseover和mouseenter区别
  13. python数据转换成pdf_用python把ipynb文件转换成pdf文件过程详解
  14. eterm协议指令解析
  15. html网页设计优秀作品和代码,从优秀的网页设计作品中学排版和配色
  16. BZOJ 4008: [HNOI2015]亚瑟王
  17. 微信分组群发45028,微信分组群发has no masssend quota hint
  18. 生产者消费者1.0(wait notify)
  19. 创新点定义,如何写创新点
  20. 白嫖小程序云存储空间,手撸你的专属云盘

热门文章

  1. Mac 10.14 编译Android 8.1源码及刷入nexus 6p
  2. Mac系统截图快捷键
  3. 肺腺癌基因19突变 预后_转移性腺癌的分类使用
  4. 测试计划一般包括什么?
  5. 实时观测程序运行状态——火焰图(Flame Graphs)
  6. 【1252. 奇数值单元格的数目】
  7. weui和jquery weui关系
  8. Mr.Robot靶机 - 机器人先生
  9. 数据结构自动组卷系统设计文档
  10. 看了功夫熊猫,非常不错。