zoukankan      html  css  js  c++  java
  • 二分查找

    二分查找也是属于双指针应用的一种体现;
    二分查找在使用的时候,数据往往是有序的,并且一般是数组;因此一般两个指针一个是从左边开始,另一个是从右边开始;
    二分查找在使用的时候一般是有大体的框架的,比如在一个数组中查找一个数的写法如下:

    public int fun(int []num, int target){
          //定义左右两边的指针并进行相应的赋值
          int  left=0,right=num.length-1;
          
          while(left<=right)
          {
                int mid=left+(right-left)/2;
                if(num[mid]==target)
                {
                      //进行相应的操作
                      return mid;
                }
                else if(num[mid]<target)
                //更新左指针
                left=mid+1;
                else if(num[mid]>target)
                //更新右指针
                right=mid-1
          }
          return -1;
    }
    
    

    查找左侧边界

    public int fun(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < target) {
                left = mid + 1;
            } else if (nums[mid] > target) {
                right = mid - 1;
            } else if (nums[mid] == target) {
                // 别返回,锁定左侧边界
                right = mid - 1;
            }
        }
        // 最后要检查 left 越界的情况
        if (left >= nums.length || nums[left] != target)
            return -1;
        return left;
    }
    

    查找右侧边界

    public int fun(int[] nums, int target) {
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < target) {
                left = mid + 1;
            } else if (nums[mid] > target) {
                right = mid - 1;
            } else if (nums[mid] == target) {
                // 别返回,锁定右侧边界
                left = mid + 1;
            }
        }
        // 最后要检查 right 越界的情况
        if (right < 0 || nums[right] != target)
            return -1;
        return right;
    }
    
  • 相关阅读:
    linux下tomcat 重启和查看日志
    js 下载文件 不直接打开的方法
    linux 安装jdk1.7
    linux下安装nginx
    mysql5.6安装
    微信小程序js倒计时功能
    Ajax 页面跳转例子
    购买阿里云免费https证书,配置tomcat实现https加密访问
    Ajax 实现数组传递(Java)
    mysql 游标实例一
  • 原文地址:https://www.cnblogs.com/noob-l/p/13604687.html
Copyright © 2011-2022 走看看