该题目来源于牛客网《剑指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
}
}

最新文章

  1. 中文编程语言Z语言开源正式开源!!!
  2. edit界面初始化加默认值
  3. 十分钟了解分布式计算:Google Dataflow
  4. Ubuntu更改鼠标灵敏度
  5. iftop安装
  6. UIkit的confirm,好看点
  7. 使用匿名管道在进程间通信 (System.IO.Pipes使用)(转)
  8. hadoop学习;安装jdk,workstation虚拟机v2v迁移;虚拟机之间和跨物理机之间ping网络通信;virtualbox的centos中关闭防火墙和检查服务启动
  9. JQ 一些基本方法
  10. mongodb常见问题
  11. [Inside HotSpot] C1编译器优化:条件表达式消除
  12. 英语口语练习系列-C04-学校生活
  13. 梯度下降法的三种形式BGD、SGD以及MBGD
  14. IBeacon协议分析
  15. PAT 1028 人口普查(20)(STL-set+思路+测试点分析)
  16. DevExpress v18.1新版亮点——WinForms篇(三)
  17. 协同过滤 spark scala
  18. 高可用Kubernetes集群-4. kubectl客户端工具
  19. 从0开始搭建symphony
  20. LightOJ 1118--Incredible Molecules(两圆相交)

热门文章

  1. 深度学习论文翻译解析(七):Support Vector Method for Novelty Detection
  2. Pandas的介绍与基本使用
  3. 《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制
  4. 村庄之间建立邮局 - 区间 dp
  5. (分块)GukiZ and GukiZiana CodeForces - 551E
  6. IO系统-文件与目录操作
  7. NOI2.4 2011
  8. 每天玩转3分钟 MyBatis-Plus - 5. 高级查询(三)(条件构造器)
  9. 利用Python进行博客图片压缩
  10. mysql安装教程linux