想要在国内竞争互联网岗位,我们就必须接受现实,开卷!
本文章基于Leetcode 704. 二分查找以及以下题目编写。

Binary search(二分查找法),又名折半查找,是面试题中一个较为热门的考题类,在国内外的很多面试过程中都有出现,而代码随想录也将其作为基础算法进行讲解,说明其确实是一个适合大部分人刷题入门的一个算法门类。

首先看一下其经典题目704. 二分查找

新入门的萌新可能一下就看出端倪:一眼丁真,鉴定为暴力破解,自己遍历一遍就完事
那当然也是可以解决的,就像没有冒泡解决不了的排序一样
但是这并不是我们的目的(当然面试官看到这里或许已经达到了目的并给你划了个叉)

简单的需求往往伴随着多种解决方法,但这个题目为你划定了最优解——二分查找法

**何为二分查找?**可以看看下面这个案例,此案例目标是在此数组中查找到37,上面是二分查找法,而下面是线性查找(也就是所谓的暴力破解法),其动画就可以明显看出其时间复杂度的差距,这也是为什么我们要学习数据结构与算法的原因(当然更多的原因是为了面试拿更高的工资)

回想到Leecode 704 其入参是一个升序数组nums[],以及一个目标值target,出参则是一个索引或者是空(-1)
完全符合此图的演示过程。

首先定义两个指针初始化为索引最高位(high)与最低位(low)

     int low = 0;int high = nums.length - 1;//这里是因为索引从0开始,但是x.length是从1开始计算的

之后考虑其循环体的编码逻辑,其题目解决有两种情况:
1.成功寻找到目标数字并返回下标
2.遍历全数组未找到对应目标值并返回-1
而条件1未实现时达成条件2
可知其循环判断条件为当low>high时结束循环(如果写在while里循环条件就是low<=high)
于是可得循环体

     int low = 0;int high = nums.length - 1;//这里是因为索引从0开始,但是x.length是从1开始计算的while(low <= high){//TODO}

由上方动图可看出其mid是随high与low动态变化的,也就是保持其high与low的中位
于是计算mid的过程应当写入循环体中

     int low = 0;int high = nums.length - 1;//这里是因为索引从0开始,但是x.length是从1开始计算的while(low <= high){int mid = (low + high)/2;//TODO}

在循环体中判断情况1(成功寻找到目标数字并返回下标)的条件,因为在查找的过程中随时都可能找到目标值

     int low = 0;int high = nums.length - 1;//这里是因为索引从0开始,但是x.length是从1开始计算的while(low <= high){int mid = (low  + high)/2;if(nums[mid] == target){return mid;//return后直接中断函数执行}//TODO}

下方就要考虑high与low两个指针移动的过程了,由动图可看出当nums[mid]小于target的时候,low指针会由原来的位置变成原来的mid+1,而大于时则是high变为mid-1(对应动图的第一步以及第二步)

于是我们可以完善以下代码

class Solution {public int search(int[] nums, int target) {int low = 0;int high = nums.length - 1;//这里是因为索引从0开始,但是x.length是从1开始计算的while(low <= high){int mid = (low + high)/2;if(nums[mid] == target){return mid;//return后直接中断函数执行,达成情况1}if(nums[mid] > target){high = mid - 1;}else{low = mid + 1;}}return -1;//此处循环体外补上遍历结束后未找到目标值的情况2}
}

接下来的部分看周末休息的时候补上,目前还在上班就先不摸了
//TODO

参考文献:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#_704-%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE

开juǎn有益系列(一)——Binary search(二分查找/折半查找算法)相关推荐

  1. c++Binary search二分法检索(折半检索)的实现算法(附完整源码)

    C++Binary search二分法检索的实现算法 C++Binary search二分法检索(折半检索)的实现算法完整源码(定义,实现,main函数测试) C++Binary search二分法检 ...

  2. 数据结构之折半查找法(Binary Search)

    对于要查找的数据已经排序,此时仍然可以使用顺序查找法来进行查找,但是此时有更加简便的方法, 那就是"折半查找法(Binary Search)". 折半查找法的实现步骤如下: 假设数 ...

  3. Binary Search(二分搜索)

    转载请注明出处 leonchen1024.com/2018/08/14/- 二分搜索(binary search),也叫做 折半搜索(half-interval search),对数搜索(logari ...

  4. LeetCode-Unique Binary Search Trees

    研究生开学以来一直在看书看文献,很少有机会去写代码.为了不让以后校招时被虐的太惨,准备每天看一道LeetCode上的题,练练手. 因此准备开一个新的专题,记录下LeetCode上的一些有意思的小的算法 ...

  5. 【LeetCode从零单排】No96 Unique Binary Search Trees

    题目 Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For ex ...

  6. [LeetCode]235.Lowest Common Ancestor of a Binary Search Tree

    题目 Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the ...

  7. 二分算法详解:整数二分及浮点数二分算法(Binary Search)(含算法模板)

    一.二分算法简介 当我们要从一个序列中查找一个元素的时候,最简单无脑的方法就是顺序查找法,但由于在大数据情况下爆炸的时间复杂度而舍弃. 最常见的方法是二分查找,也称折半查找(Binary Search ...

  8. #2020寒假集训#二分入门(Binary Search)代码笔记

    二分查找--Binary Search 原理就类似于下图啦(网上看到哒,忽略这个代价) 二分的时间复杂度一般是 O(logN) 的,超开心了有木有٩(๑>◡<๑)۶ 最简单来说,它可以分为 ...

  9. 笔试算法题(58):二分查找树性能分析(Binary Search Tree Performance Analysis)

    议题:二分查找树性能分析(Binary Search Tree Performance Analysis) 分析: 二叉搜索树(Binary Search Tree,BST)是一颗典型的二叉树,同时任 ...

  10. 【ACM】二叉搜索树(Binary Search Tree /BS Tree) 小结

    动态管理集合的数据结构--二叉搜索树 搜索树是一种可以进行插入,搜索,删除等操作的数据结构,可以用字典或者优先队列. 二叉排序树又称为二叉查找树,他或者为空树,或者是满足如下性质的二叉树. (1)若它 ...

最新文章

  1. 英伟达十年力作:新一代光线追踪显卡 Quadro RTX及核心架构Turing,可支持AI运算...
  2. xx学OD -- 消息断点 RUN跟踪(下)
  3. [译]WPF 应用程序和MVVM设计模式 ——Josh Smith
  4. VTK:PCA用法实战
  5. 企业网站 源码 e-mail_天津seo优化套餐服务收费_天津网站优化关键词价格
  6. Python SHA1加密算法
  7. 蓝桥杯第八届省赛JAVA真题----分巧克力
  8. 【BZOJ4128】Matrix,拔山盖世的矩阵乘法+随机化
  9. 对TRIM SCSI命令的一些分析
  10. 第二章节 ASP.NET 验证控件(二)
  11. Qt5学习笔记之bin文件合成工具四:完善功能打包程序
  12. 这个技巧,让你更从容地使用Mac电脑~
  13. 2. laravel 创建第一条路由
  14. seems to be corrupted. Trying one more time
  15. 数据管理平台DMP细致研究——BlueKai
  16. Python爬虫学习(六)selenium自动化测试登陆百度账号_滑动验证码问题
  17. 计算机考研是属于工学呢还是理学呀,计算机考研是属于工学呢还是理学
  18. 2021年司钻(井下)考试及司钻(井下)考试报名
  19. java 序列化理解_对Java Serializable(序列化)的理解和总结(二)
  20. 【无标题】删除数组中的重复元素

热门文章

  1. 金融企业如何构建有效的数据分析体系?1000+案例经验汇总
  2. 10/13 Total variation loss 全变分
  3. 网站服务器需要备案,网站服务器需要备案
  4. sdk 今日头条_今日头条商业SDK(激励视频)的坑
  5. SQL数据库性能胯了,换 SSD硬盘就能解决问题?
  6. linux shell 端口扫描,shell脚本结合iptables防端口扫描的实现
  7. WSDM2021推荐系统论文集锦
  8. 解析ESX SERVER故障数据恢复方法
  9. Spring Data Jpa 复合主键
  10. 微信小程序头像为什么是模糊的?小程序头像模糊怎么办?