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. Stm32设置串口300波特率 2400 4800 9600

    Stm32设置串口300波特率   本文以串口4为例子: 在APB1为72MHz的时钟频率下,是设置不了300波特率的,原因在于 Tx/Rx baud = fck / (16 * reg_value) ...

  2. 痞子衡嵌入式:内存读写正确性压力测试程序(memtester)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是内存读写正确性压力测试程序memtester. 在嵌入式系统中,内存(RAM)的重要性不言而喻,系统性能及稳定性都与内存息息相关.关于内 ...

  3. ECharts连接数据库的具体实现

    相关描述 我们由之前的实例可以得知,要是不连接数据库的话,只是需要套用一下ECharts的相关模板即可,这部分内容我在前几篇中已经叙述过了: 现在,我们需要实现的是,将数据库里面的数据导入到web网页 ...

  4. gRPC之.Net6中的客户端和服务端共用proto协议文件

    1.说明 在上一篇文章gRPC之.Net6中的初步使用介绍中,我们简单的介绍了gRPC在服务端.客户端以及Web项目中的使用. 有一个问题,不知道大家发现没有,就是不管在服务端项目还是客户端项目中,我 ...

  5. MYSQL DQL语句(基础)

    MySQL引入 数据库的好处 持久化数据到本地 可以实现结构化查询,方便管理 数据库的相关概念 DB:数据库(database):存储数据的"仓库",它保存了一系列有组织的数据. ...

  6. 《HelloGitHub》第 84 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  7. 一文快速入门任务调度框架-Quartz

    前言 还不会 Quartz?如果你还没有接触过Quartz,那么你可能错过了一个很棒的任务调度框架!Quartz 提供了一种灵活.可靠的方式来管理和执行定时任务,让咱们的定时任务更加优雅.本篇文章将为 ...

  8. Ansible 安装并简单使用

    Ansible 简介 Ansible 是一款 IT 自动化工具.主要应用场景有配置系统.软件部署.持续发布及不停服平滑滚动更新的高级任务编排. Ansible 本身非常简单易用,同时注重安全和可靠性, ...

  9. MySQL(一)Linux下MySQL的安装

    Linux下MySQL的安装 1 MySQL的安装 1.1 Linux系统以及工具的准备 这里使用两台CentOS7虚拟机,一台安装8.0版本,另一台克隆的虚拟机安装5.7版本 克隆的虚拟机需要进行配 ...

  10. LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,至少在算法题解方面确定了小彭的风格 ...