[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
复制代码

 

posted @   Zhentiw  阅读(170)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2017-03-20 [Angular] Reactive Form -- FormControl & formControlName, FormGroup, formGroup & formGroupName
2016-03-20 [Angular 2] Using the @Inject decorator
2016-03-20 [WebStrom] Cannot detect file change to trigger webpack re-compile
2016-03-20 [TypeScript] Avoid any type
2016-03-20 [Angular 2] Injecting a Service
2016-03-20 [Angular 2] Event in deep
2015-03-20 [Javascript] Get Started with LeafletJS Mapping
点击右上角即可分享
微信分享提示