Go语言实现:【剑指offer】数组中出现次数超过一半的数字
2024-10-08 08:21:41
该题目来源于牛客网《剑指offer》专题。
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
Go语言实现:
方法一,排序取中间值判断:
func moreThanHalfNum(nums []int) int {
if nums == nil {
return 0
}
sort.Ints(nums)
//如果条件符合,结果一定是中间这个数
middle := nums[len(nums)/2]
//判断条件是否成立
count := 0
for _,num := range nums {
if num == middle {
count ++
}
}
if count>len(nums)/2 {
return middle
} else {
return 0
}
}
方法二,遍历一遍记次数判断:
func moreThanHalfNum(nums []int) int {
if nums == nil {
return 0
}
result := 0
count := 0
for index, num := range nums {
if index == 0 {
result = num
count = 1
} else {
if result == num { //相等加一
count ++
} else { //不等减一
count --
}
if count == 0 { //重新开始
result = num
count = 1
}
}
}
//判断条件是否成立
count = 0
for _, num := range nums {
if num == result {
count ++
}
}
if count > len(nums)/2 {
return result
} else {
return 0
}
}
最新文章
- 中文编程语言Z语言开源正式开源!!!
- edit界面初始化加默认值
- 十分钟了解分布式计算:Google Dataflow
- Ubuntu更改鼠标灵敏度
- iftop安装
- UIkit的confirm,好看点
- 使用匿名管道在进程间通信 (System.IO.Pipes使用)(转)
- hadoop学习;安装jdk,workstation虚拟机v2v迁移;虚拟机之间和跨物理机之间ping网络通信;virtualbox的centos中关闭防火墙和检查服务启动
- JQ 一些基本方法
- mongodb常见问题
- [Inside HotSpot] C1编译器优化:条件表达式消除
- 英语口语练习系列-C04-学校生活
- 梯度下降法的三种形式BGD、SGD以及MBGD
- IBeacon协议分析
- PAT 1028 人口普查(20)(STL-set+思路+测试点分析)
- DevExpress v18.1新版亮点——WinForms篇(三)
- 协同过滤 spark scala
- 高可用Kubernetes集群-4. kubectl客户端工具
- 从0开始搭建symphony
- LightOJ 1118--Incredible Molecules(两圆相交)