• 二分查找


    思路很简单,有三个游标:left、mid、right,然后根据key的值与num[mid]的值的比较结果,缩小比较范围。

    主要摆出两个代码,一个是right指向最后一个元素的后一个,一个是right指向最后一个元素

    • right指向最后一个元素的后一个
     1 public static int binarySearch(int[] nums, int key){
     2         if (nums == null){
     3             return -1;
     4         }
     5         int left = 0;
     6         int right = nums.length;
     7 
     8         // right表示的是最后一个元素的后一个
     9         while (left<right){
    10             int mid = (left+right)/2;
    11             if (key == nums[mid]){
    12                 return mid;
    13             }
    14             if (key > nums[mid]){
    15                 left = mid+1;
    16             }
    17             if (key < nums[mid]){
    18                 right = mid;
    19             }
    20         }
    21 
    22         return -1;
    23     }
    • right指向最后一个元素
     1 public  static int binarySearch2(int[] nums, int key){
     2         if (nums==null){
     3             return -1;
     4         }
     5 
     6         int left = 0;
     7         int right = nums.length-1;
     8 
     9         while (left<=right){
    10             int mid = (left+right)/2;
    11             if (key == nums[mid]){
    12                 return mid;
    13             }
    14             if (key > nums[mid]){
    15                 left = mid+1;
    16             }
    17             if (key < nums[mid]){
    18                 right = mid-1;
    19             }
    20         }
    21 
    22         return -1;
    23     }

    要注意的问题:

    left+right可能越界,因此写成mid=left+((right-left)>>1);

    判断浮点数时不能用等于,需要写成key-nums[mid]<1e-6 || nums[mid]-key<1e-6;

  • 相关阅读:
    uni-app 去除顶部导航栏
    javascript DOM和DOM操作的四种基本方法
    js获取当前时间
    vue自定义事件---拖拽
    富文本去除标签空格
    js贪吃蛇(构造函数)
    vue v-html 富文本解析 空格,换行,图片大小问题
    实验十二 团队项目用户验收评审
    Beta冲刺-第四天
    Beta冲刺-第二天
  • 原文地址:https://www.cnblogs.com/WanJiaJia/p/7479335.html
Copyright © 2020-2023  润新知