2021-08-23:超级水王问题。扩展1:摩尔投票。扩展2:给定一个正数K,返回所有出现次数>N/K的数。
2021-08-23:超级水王问题。扩展1:摩尔投票。扩展2:给定一个正数K,返回所有出现次数>N/K的数。
福大大 答案2021-08-23:
扩展1:
1.如果无候选,当前数就是候选,血为1。
2.如果有候选。
2.1.当前数==候选数,血++。
2.2.当前数!=候选数,血–。
最后遍历验证。
时间复杂度:O(N)。
空间复杂度:O(1)。
扩展2:k-1个候选。
最后遍历验证。
代码用golang编写。代码如下:
package main
import (
"fmt"
)
func main() {
arr := []int{1, 2, 1, 5, 1, 1, 2}
printHalfMajor(arr)
fmt.Println("--------")
printKMajor(arr, 7)
}
func printHalfMajor(arr []int) {
cand := 0
HP := 0
for i := 0; i < len(arr); i++ {
if HP == 0 {
cand = arr[i]
HP = 1
} else if arr[i] == cand {
HP++
} else {
HP--
}
}
if HP == 0 {
fmt.Println("no such number.")
return
}
HP = 0
for i := 0; i < len(arr); i++ {
if arr[i] == cand {
HP++
}
}
if HP > len(arr)/2 {
fmt.Println(cand)
} else {
fmt.Println("no such number.")
}
}
func printKMajor(arr []int, K int) {
if K < 2 {
fmt.Println("the value of K is invalid.")
return
}
// 攒候选,cands,候选表,最多K-1条记录! > N / K次的数字,最多有K-1个
cands := make(map[int]int)
for i := 0; i != len(arr); i++ {
if _, ok := cands[arr[i]]; ok {
cands[arr[i]] = cands[arr[i]] + 1
} else { // arr[i] 不是候选
if len(cands) == K-1 { // 当前数肯定不要!,每一个候选付出1点血量,血量变成0的候选,要删掉!
allCandsMinusOne(cands)
} else {
cands[arr[i]] = 1
}
}
}
// 所有可能的候选,都在cands表中!遍历一遍arr,每个候选收集真实次数
reals := getReals(arr, cands)
hasPrint := false
for key, _ := range cands {
if reals[key] > len(arr)/K {
hasPrint = true
fmt.Println(fmt.Sprintf("%d", key) + " ")
}
}
if hasPrint {
fmt.Println("")
} else {
fmt.Println("no such number.")
}
}
func allCandsMinusOne(map0 map[int]int) {
removeList := make([]int, 0)
for key, value := range map0 {
if value == 1 {
removeList = append(removeList, key)
}
map0[key] = value - 1
}
for removeKey, _ := range removeList {
delete(map0, removeKey)
}
}
func getReals(arr []int, cands map[int]int) map[int]int {
reals := make(map[int]int)
for i := 0; i != len(arr); i++ {
curNum := arr[i]
if _, ok := cands[curNum]; ok {
if _, ok2 := reals[curNum]; ok2 {
reals[curNum] = reals[curNum] + 1
} else {
reals[curNum] = 1
}
}
}
return reals
}
执行结果如下:

2021-08-23:超级水王问题。扩展1:摩尔投票。扩展2:给定一个正数K,返回所有出现次数>N/K的数。的更多相关文章
- web前端项目中遇到的一些问题总结(08.23更新)
个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 写一些最近工作中Vue项目中遇到的问题. 巴啦啦小魔仙,污卡拉,全身变,小 ...
- 2021.08.16 P1260 工程规划(差分约束)
2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...
- 2021.08.01 P4359 伪光滑数(二叉堆)
2021.08.01 P4359 伪光滑数(二叉堆) [P4359 CQOI2016]伪光滑数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 若一个大于 11 的整数 MM ...
- 2021.07.23 P3275 糖果(差分约束)
2021.07.23 P3275 糖果(差分约束) [P3275 SCOI2011]糖果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.为了满足更多更多约束条件,合适地 ...
- http://www.cnblogs.com/gaojing/archive/2011/08/23/2413616.html
http://www.cnblogs.com/gaojing/archive/2011/08/23/2413616.html
- 2021.08.30 前缀函数和KMP
2021.08.30 前缀函数和KMP KMP算法详解-彻底清楚了(转载+部分原创) - sofu6 - 博客园 (cnblogs.com) KMP算法next数组的一种理解思路 - 挠到头秃 - 博 ...
- 2021.08.16 P1078 文化之旅(最短路)
2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...
- 2021.08.16 P1300 城市街道交通费系统(dfs)
2021.08.16 P1300 城市街道交通费系统(dfs) P1300 城市街道交通费系统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 城市街道交费系统最近创立了.一 ...
- 2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意)
2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意) P1363 幻象迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 幻象迷宫可以认为是无限 ...
- 2021.08.10 Euler函数总结
2021.08.10 Euler函数总结 知识: 记 φ(n) 表示在 [1,n] 中与 n互质的数的个数. 1.p为质数,则 \[φ(p^l)=p^l-p=p^{l-1}(p-1) \] 注:每p个 ...
随机推荐
- 【BUUCTF】ACTF2020 新生赛Include1 write up
查看源代码+抓包都没有发现什么信息,只有这两个东东 <meta charset="utf8"> Can you find out the flag? <meta ...
- angularJS依赖注入的个人理解
依赖注入:一句话 --- 没事你不要来找我,有事我会去找你. AngularJS 5个核心组件用来作为依赖注入: value factory service provider constant ...
- Linux系统mysql免安装版配置指南
1.下载(/usr/local目录) wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.32-linux-glibc2.12-x ...
- 14.AQS的前世,从1990年的论文说起
大家好,我是王有志.关注王有志,一起聊技术,聊游戏,聊在外漂泊的生活. 鸽了这么久怪不好意思的,因此送一本<多处理器编程的艺术>,快点击此处参加吧.另外欢迎大家加入"共同富裕的J ...
- Linux常用命令 备查
区分关系: 有很多类型的shell,最常见的一种Shell是bash env 查看所有环境变量 用echo查看环境变量 echo $LOGNAME echo $PATH https://shimo.i ...
- 商城网站毕业设计( Python +Vue)
网站介绍 基于 python 开发的电子商城网站,平台采用 B/S 结构,后端采用主流的 Python 语言进行开发,前端采用主流的 Vue.js 进行开发.这是给师弟开发的毕业设计. 整个平台包括前 ...
- THFuse: An infrared and visible image fusion network using transformer and hybrid feature extractor 论文解读
THFuse: An infrared and visible image fusion network using transformer and hybrid feature extractor ...
- [issues] webrtc 接入SRS丢包率不正确问题
目录 [issues] webrtc 接入SRS丢包率不正确问题 原因和解决方法 srs增加rtx SDP协商 构建RTX包 [issues] webrtc 接入SRS丢包率不正确问题 原因和解决方法 ...
- groovy, Scala和kotlin区别
所谓Scala的目的是什么?事实上Scala作者Martin Odesky他在<Programming in Scala>中写到,Scala的目的是为了更好的融合OO与FP,确实,不是取代 ...
- @property、关联关系、继承、多继承
1.@property使用来修饰属性的,将属性私有化改为公有化,但是可以设置属性条件 格式: class Person: def __init__(self,name,age): self.name ...