LeetCode算法之二分查找

前言

对于算法一直抱有恐惧感,觉得没有算法我也写了这么多代码,但周遭的环境让我感觉目前身为一名浅薄知识的敲代码的人,是需要去不断的汲取一些知识,所以就像大学学习英语单词一样,从Abandon开始,从查找开始。

二分查找

  • 二分查找的前提:1.数组必须是有序的 2.数组中不存在重复元素
  • 二分查找的边界:在写代码之前要清楚边界,才能确定循环条件到底是while(left <= right),还是while(left <
    right),到底是middle = right -1,还是 middle = right

所以会以两种情况来写

var search = function(nums, target) {let l = 0, r = nums.length - 1;//定义区间为[left, right]while(l <= r)//当 left = right时,区间[left, right]依然有效,所以使用 <={let mid = parseInt(l + (r - l) / 2);//防止溢出,这里注意再js中 a/b是有小数位的,所以需要使用parseInt//let mid = l + (r -1) >> 2  在这里发现使用为运算反而会不保留小数位,更加方便if(nums[mid] === target) return mid;//找到目标值,返回midl = nums[mid] < target ? mid + 1 : l;//当时nums[mid] < target成立,可以确定目标在右区间,因此缩小区间[mid + 1, right]r = nums[mid] < target ? r : mid - 1;//当时nums[mid] < target不成立,可以确定目标在左区间,因此缩小区间[left, mid - 1]        }return -1;
};

第二种情况

var search = function(nums, target) {let l = 0, r = nums.length - 1;while(l < r){//let mid = parseInt(l + (r - l) / 2);let mid = l + ((r - l) >> 1);if(nums[mid] === target) return mid;l = nums[mid] < target ? mid + 1 : l;r = nums[mid] < target ? r : mid;        }return -1;
};

这个算法写完,感觉对于基础的位运算需要再次复习一下,再往下又想到了计算机基础中,数据在内存中如何存储也需要复习一下

leetcode算法之二分查找相关推荐

  1. leetcode算法题--二分查找

    原题链接:https://leetcode-cn.com/problems/binary-search/ 这题很简单,不用用递归 int search(vector<int>& n ...

  2. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

  3. 数据结构与算法:二分查找

    二分查找是搜索算法中的一种,用来搜索有序数组 二分查找: 是一种简单算法,其输入是一个有序的元素列表(必须有序的原因稍后解释).如果要 查找的元素包含在列表中,二分查找返回其位置:否则返回null. ...

  4. javascript数据结构与算法---检索算法(二分查找法、计算重复次数)

    javascript数据结构与算法---检索算法(二分查找法.计算重复次数) /*只需要查找元素是否存在数组,可以先将数组排序,再使用二分查找法*/ function qSort(arr){if (a ...

  5. java二分查找法_java算法之二分查找法的实例详解

    java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...

  6. 查找算法:二分查找、顺序查找

    08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de ...

  7. list 查找_趣味图解算法之二分查找

    大多数程序员在看到"算法"两字的时候,是不是头大如斗.但如果想去大公司发展,在面试时又绕不过算法这座大山.市面上好多讲解算法的书籍(如算法导论)基本上都太学术.太复杂,对初学者很不 ...

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

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

  9. 算法总结-二分查找算法

    二分查找也称折半查找(Binary Search),是一种效率较高的查找方法.该算法要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列.如果一个序列是无序的或者是链表,那么该序列就不能使用二 ...

最新文章

  1. 数据库物理文件 mysql_MYSQL数据库-物理文件
  2. 架空输电线路运行规程_架空输电线路导、地线安全系数的规定
  3. 【codeforces 508B】Anton and currency you all know
  4. 网站静态化处理—动静分离策略(3)
  5. linux存储--可执行文件结构和进程内存模型(三)
  6. PL/SQL的快捷键设置
  7. go 错误处理总结
  8. 事件处理-注册时间 // 事件处理-修饰符 // 事件处理-键盘事件的修饰符 // 事件处理-系统修饰符 // 事件处理-鼠标修饰符
  9. pcp pmda mysql_linux下的mysql的安装
  10. Linux运维问题解决(4)——linux LVM技术 逻辑卷增加 扩容 缩小 删除等操作
  11. ASP.NET基础教程-DataGrid表格控件-更新数据
  12. python手写数字识别实验报告_机器学习python实战之手写数字识别
  13. ServerHttpRequest 和 HttpServletRequest 获取 IP 地址 学习笔记
  14. 如何设置一个全局流水号
  15. Mac上修改hosts文件无效的解决方案
  16. 解决fortify扫描出的Path Manipulation问题(java语言)
  17. layui关闭当前tab页
  18. [stm32 HAL库] RTC和BKP驱动
  19. OracleDBLink
  20. 主流车品牌魅力指数榜别克、东风日产、一汽丰田列前三

热门文章

  1. pymysql安装问题
  2. 多线程系列教材 (五)- Java 演示多线程死锁
  3. 基于cosmos的简易项目-啄木鸟电子医疗病历(附源码)
  4. 把古代的银子换算成今天的人民币
  5. Kettle环境中的参数传递
  6. 【设计模式自习室】适配器模式
  7. el-upload 上传图片文件方法
  8. 1042电子老鼠闯迷宫 (广搜)
  9. css flex布局自动换行
  10. 1037: [ZJOI2008]生日聚会Party