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;
    }
    
  • 相关阅读:
    【宋红康程序思想学习日记5】数组排序之冒泡法
    求割点 poj 1523
    网络流 poj 3308 最小割
    网络流最小割 POJ 3469
    网络流 POJ2112
    网络流 HDU 3605
    网络流HDU 2883
    网络流 最大流HDU 3549
    微信公众平台开发者中心服务器配置Token验证失败问题
    排列熵算法简介及c#实现
  • 原文地址:https://www.cnblogs.com/noob-l/p/13604687.html
Copyright © 2011-2022 走看看