美文网首页
Java的二分查找及上下界

Java的二分查找及上下界

作者: zhouwaiqiang | 来源:发表于2019-03-20 15:15 被阅读0次
  1. 普通的二分查找,利用中间数比较,将上界下标或者下界下标减1或者加1,针对查找某个数是否存在的情况,或者是某个有序数组单一存在的某个数:
private static int binary_search(int[] nums, int key) {
        int low = 0, high = nums.length-1;
        while(low<=high) {
            int mid = low + ((high-low)>>1);
            if (nums[mid] > key) high = mid-1;
            else if (nums[mid] < key) low = mid + 1;
            else return mid;
        }
        return -1;
    }
  1. 查找下界,当有数组中存在多个重复的数据时,二分查找原型就不是那么好用了,这个时候就需要确定这个数对应的上界和下界。下界的求解过程就是我们在二分查找基础上改动,因为求解下界也就是左侧的下标,那么我们就是采用右侧往左压缩的过程,直到一个合适的索引为止,如下代码中所示。将等号取在第一个等式上,往左侧压缩:
private static int get_lower(int[] nums, int key) {
        int low=0, high = nums.length-1;
        System.out.println("test");
        while(low<=high) {
            int mid = low + (high-low)/2;
            if (nums[mid] >= key) high = mid-1;
            else low = mid+1;
        }
        if (low<nums.length && nums[low]== key) return low;
        return -1;
    }
  1. 查找上界,原理和下界相同,不过是往右侧压缩:
private static int get_upper(int[] nums, int key) {
        int low = 0, high = nums.length-1;
        while(low<=high) {
            int mid = low + (high-low)/2;
            if (nums[mid] <= key) low = mid+1;
            else high = mid-1;
        }
        if(high>=0 && nums[high]==key) return high;
        return -1;
    }

部分参考链接

http://zhangxiaoya.github.io/2015/06/26/upper-bound-and-lower-bound-of-binary-search/

相关文章

  • Java的二分查找及上下界

    普通的二分查找,利用中间数比较,将上界下标或者下界下标减1或者加1,针对查找某个数是否存在的情况,或者是某个有序数...

  • 11.二分查找的实现与特性

    11.二分查找的实现与特性 二分查找的前提 目标函数单调性(单调递增或者递减) 存在上下界(bounded) 能够...

  • 二分查找的一些思考

    [toc] 二分查找 二分查找中常见的疑惑 二分写法通常有很多种,有的时候自己在写的时候往往会纠结与上下界、开闭区...

  • 二分查找

    二分查找的特点: Sorted (单调递增或者递减) Bound (存在上下界) Accessible by in...

  • linux c/c++ 面试题目整理(二)

    11、编写一个二分查找函数,下界为low,上界为high 递归法: 非递归法: 注意:二分查找算法前提是已经排好序...

  • leetcode-Array篇easy难度之求指定偏移量元素数量

    关键词 绝对值,二分查找,上下界,TreeSet 题目描述 https://leetcode.com/proble...

  • 二分查找上下界

    普通的二分查找如下。要求给的数组有序。算法题里出现有序的情况时,用二分查找能将数组内查找的时间复杂度从O(N)降到...

  • Lecture02

    时间复杂度-大O分析明确线性查找、二分查找的big-O notation结果及原因 8种Java基本数据结构类型(...

  • 二分查找

    概念二分查找又叫折半查找,从排序数组中查找元素的位置。 图示二分查找 Java实现 复杂度T(n)=T(n/2)+...

  • 二分查找代码框架

    1.基本的二分查找 2.寻找左侧边界的二分查找 3.寻找右侧边界的二分查找 4.说明 这是一个Java实现的二分查...

网友评论

      本文标题:Java的二分查找及上下界

      本文链接:https://www.haomeiwen.com/subject/igazmqtx.html