zoukankan      html  css  js  c++  java
  • [Algorithm] Count occurrences of a number in a sorted array with duplicates using Binary Search

    Let's say we are going to find out number of occurrences of a number in a sorted array using binary search in O(log n) time.

    For example the given array is:

    [1,1,3,5,5,5,5,5,9,11],

    the number 5 appears 5 times;

    the number 3 appears 1 time;

    2 appears 0 times.

    The idea:

    we can use binary search twice, first time is to find first index of target number in the array; second is to find last index of given number in the array.

    function count_numbers(ary, target) {
      function helper(ary, target, isFirst) {
        let start = 0;
        let end = ary.length - 1;
        let result = -1;
        while (start <= end) {
          let mid = Math.floor((start + end) / 2);
          if (ary[mid] === target) {
            result = mid;
            isFirst ? (end = mid - 1) : (start = mid + 1);
          } else {
            ary[mid] > target ? (end = mid - 1) : (start = mid + 1);
          }
        }
    
        return result;
      }
    
      const first = helper(ary, target, true);
      const last = helper(ary, target, false);
    
      if (first === -1 || last === -1) {
        return 0;
      }
      return last - first + 1;
    }
    
    console.log(count_numbers([1, 1, 3, 3, 5, 5, 5, 5, 5, 8, 11], 5)); // 5
  • 相关阅读:
    使用jquery.validate.js实现boostrap3的校验和验证
    MySQL 随机取数据效率问题
    qq在线客服代码
    使用Shell脚本查找程序对应的进程ID,并杀死进程
    Redis-概述
    JVM的类加载机制
    volatile
    java内存相关
    设计模式--模板方法
    设计模式概述
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10567475.html
Copyright © 2011-2022 走看看