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
}

执行结果如下:


左神java代码

2021-08-23:超级水王问题。扩展1:摩尔投票。扩展2:给定一个正数K,返回所有出现次数>N/K的数。的更多相关文章

  1. web前端项目中遇到的一些问题总结(08.23更新)

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 写一些最近工作中Vue项目中遇到的问题. 巴啦啦小魔仙,污卡拉,全身变,小 ...

  2. 2021.08.16 P1260 工程规划(差分约束)

    2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...

  3. 2021.08.01 P4359 伪光滑数(二叉堆)

    2021.08.01 P4359 伪光滑数(二叉堆) [P4359 CQOI2016]伪光滑数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 若一个大于 11 的整数 MM ...

  4. 2021.07.23 P3275 糖果(差分约束)

    2021.07.23 P3275 糖果(差分约束) [P3275 SCOI2011]糖果 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.为了满足更多更多约束条件,合适地 ...

  5. http://www.cnblogs.com/gaojing/archive/2011/08/23/2413616.html

    http://www.cnblogs.com/gaojing/archive/2011/08/23/2413616.html

  6. 2021.08.30 前缀函数和KMP

    2021.08.30 前缀函数和KMP KMP算法详解-彻底清楚了(转载+部分原创) - sofu6 - 博客园 (cnblogs.com) KMP算法next数组的一种理解思路 - 挠到头秃 - 博 ...

  7. 2021.08.16 P1078 文化之旅(最短路)

    2021.08.16 P1078 文化之旅(最短路) 题意: n个地,k个信仰,每个地都有自己的信仰,信仰之间会相互排斥,同信仰之间也会相互排斥,有m条路,问从s到t的最短距离是多少? 有一位使者要游 ...

  8. 2021.08.16 P1300 城市街道交通费系统(dfs)

    2021.08.16 P1300 城市街道交通费系统(dfs) P1300 城市街道交通费系统 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 城市街道交费系统最近创立了.一 ...

  9. 2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意)

    2021.08.16 P1363 幻象迷宫(dfs,我感受到了出题人浓浓的恶意) P1363 幻象迷宫 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 幻象迷宫可以认为是无限 ...

  10. 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个 ...

随机推荐

  1. 控制论个人学习笔记-线性系统的校正方法&现代控制论基础

    note 2020-08-05搬运 下面的内容来自(我的CSDN博客)[https://blog.csdn.net/weixin_45183579/article/details/105201314] ...

  2. Java 编程入门第一课:HelloWorld

    在之前的文章中,壹哥带大家搭建出了 Java 的开发环境,配置了 JDK 环境变量,并且我们也熟悉了 dos 命令行的操作.那么从这篇文章开始,壹哥就开始带各位真正地学习 Java 代码该怎么写. - ...

  3. 在Winform分页控件中集成导出PDF文档的功能

    当前的Winform分页控件中,当前导出的数据一般使用Excel来处理,Excel的文档可以用于后期的数据展示或者批量导入做准备,因此是比较好的输入输出格式.但是有框架的使用客户希望分页控件能够直接导 ...

  4. HTML+JS+CSS实现图片文件上传界面设计的例子

    在Java Web应用程序设计中文件上传功能的实现是一项非常重要的工作,本文中的例子程序实现了文件上传功能的界面设计.在Java Web应用程序设计中涉及到上传图片文件功能时,往往都需要对图片文件进行 ...

  5. ThreadLocal部分源码分析和应用场景

    结构演进 早起JDK版本中,ThreadLocal内部结构是一个Map,线程为key,线程在"线程本地变量"中绑定的值为Value.每一个ThreadLocal实例拥有一个Map实 ...

  6. vue中优雅的使用定时器

    1.常见方法.在data中声明一个变量,定时器绑定到变量中,然后在beforeDestory中销毁这个定时器 举个例子 首先我在data函数里面进行定义定时器名称 data() { return { ...

  7. R语言包和中文乱码解决方案

    常用R语言包 --数据处理:lubridata ,plyr ,reshape2,stringr,formatR,mcmc: --机器学习:nnet,rpart,tree,party,lars,boos ...

  8. golang pprof 监控系列(4) —— goroutine thread 统计原理

    golang pprof 监控系列(4) -- goroutine thread 统计原理 大家好,我是蓝胖子. 在之前 golang pprof监控 系列文章里我分别介绍了go trace以及go ...

  9. 更新pip遇到的问题及解决方法

    问题ython -m pip install --upgrade pip --user D:\APP\Anaconda3\python.exe: No module named pip解决方法 pyt ...

  10. VMware另一个程序锁定文件的一部分,进程无法访问

    问题描述:搭建RAC11g,在做共享磁盘的时候,节点2要共享节点1的磁盘,但是有一个问题,节点2关机之后,再打开,是有一个访问节点1的磁盘的过程,如果访问失败,就会开不了机器 rac1加的三个磁盘: ...