博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
找到数组中频次大于1/k的数
阅读量:5308 次
发布时间:2019-06-14

本文共 516 字,大约阅读时间需要 1 分钟。

Majority Number III

给定一个数组(长度为L),找到所有出现频次大于1/k的数字。

  我们主要使用摩尔投票法(Voting Algorithm)结合Map的数据结构解决此问题。其时间复杂度O(n),空间复杂度O(k)。

  主元素数量大于数组长度的1/k,因此有k-1一个候选人(Candidate),通过loop整个数组两次得到答案,遍历第一次找有可能的候选人,第二次统计这些候选人出现的频次。  

  当数组长度L小于k时,直接对所有出现的数字进行统计得到结果。

  当数组长度L大于等于k时,建立一个以<candidate, counter>的容量为k-1的Map,遍历数据进行统计,如果Map的容量未满k-1或者存在candidate的频次为0,将遇到的数字选为candidate; 如果Map的容量已满k-1且所有candidate的频次不为零则所有candidate的频次--。

 

References:

[1]https://www.zhihu.com/question/49973163

 

转载于:https://www.cnblogs.com/fakedestiny/p/10996980.html

你可能感兴趣的文章
231. Power of Two java solutions
查看>>
4395: [Usaco2015 dec]Switching on the Lights
查看>>
iOS UIAlertView添加输入框
查看>>
第十次作业
查看>>
洛谷 5290 [十二省联考2019]春节十二响——堆
查看>>
洛谷 2038 无线网络发射器选址——枚举
查看>>
安卓环境home assistant搭建
查看>>
react 避免重复渲染
查看>>
Struts2搭建demo
查看>>
codeforces 668C - Little Artem and Random Variable
查看>>
build-your-microservices-api-with-swagger
查看>>
CF807
查看>>
第一个内核模块,Hello Kernel的编写历程
查看>>
解决Get请求的长度限制
查看>>
Java:并发不易,先学会用
查看>>
JavaScritp设计模式1 ----- 单件模式
查看>>
弄个知乎的粒子动态背景_实践particles.js
查看>>
js定时器
查看>>
完美解决linux系统sublime不能输入中文
查看>>
数据结构算法 (树 的基本算法)
查看>>