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
  • 相关阅读:
    企业年金个税计算问题解读
    无线共享代码
    解决IE只能用管理员身份运行才能正常
    关于系统安装经验总结
    T-SQL 中Float数据类型的奇葩四舍五入
    win7 enterprise key backup
    IOS-触摸手势
    IOS-尺寸
    iOS开发-object-c之 @[], @{}
    IOS-电话和短信功能
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10567475.html
Copyright © 2011-2022 走看看