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
  • 相关阅读:
    3.30 DOM操作
    3.29 js例题
    3.28 函数
    3.27 数组例题
    Web 条件查询、分页查
    web页面增、删、改
    JDBC事务、下拉框
    JSTL、断点、JavaEE、DBUTils连接池
    jsp、el表达式
    Session技术 、jsp页面
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10567475.html
Copyright © 2011-2022 走看看