11 极客大学-算法训练营-覃超-第十一课.pdf

二分查找前提:

  • 目标函数的单调性(单调递增或者递减)==> 可能涉及到数组的排序
  • 存在上下界
  • 能够通过索引访问

二分查找代码模板

  1. function binarySearch(nums, target){
  2. let left = 0;
  3. let right = nums.length-1;
  4. while(left <= right){
  5. // let midddle = left + ((right-left)>>1)
  6. let middle = Math.floor((left+right)/2)
  7. if(nums[middle] === target){
  8. return middle;
  9. }else if(nums[middle] > target){
  10. right = middle-1;
  11. }else if(nums[middle] < target){
  12. left = middle+1;
  13. }
  14. }
  15. return -1;
  16. }

参考链接

  • 二分查找代码模板
  • Fast InvSqrt() 扩展阅读

    实战题目

  • x 的平方根(字节跳动、微软、亚马逊在半年内面试中考过)

    1. function mySqry(x){
    2. if(x<2){return x}
    3. let left = 1, mid, right = Math.floor(x/2);
    4. while(left <= right){
    5. mid = Math.floor(left + (right-left)/2);
    6. if(mid * mid === x){
    7. return x;
    8. }else if(mid * mid > x){
    9. right = mid - 1;
    10. }else{
    11. left = mid + 1;
    12. }
    13. }
    14. return right;
    15. }
  • 有效的完全平方数(亚马逊在半年内面试中考过)

    课后作业

  • 搜索旋转排序数组(Facebook、字节跳动、亚马逊在半年内面试常考)

  • 搜索二维矩阵(亚马逊、微软、Facebook 在半年内面试中考过)
  • 寻找旋转排序数组中的最小值(亚马逊、微软、字节跳动在半年内面试中考过)
  • 使用二分查找,寻找一个半有序数组 [4, 5, 6, 7, 0, 1, 2] 中间无序的地方
    说明:同学们可以将自己的思路、代码写在学习总结中

特别好用的二分查找法模板(第 2 版)

https://www.liwei.party/2019/06/17/leetcode-solution-new/search-insert-position/


本周作业

简单: