49 lines
955 B
Go
49 lines
955 B
Go
|
|
/*
|
|||
|
|
* @Author : huangzj
|
|||
|
|
* @Time : 2021/3/16 15:45
|
|||
|
|
* @Description:
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
package NumberMoreThan
|
|||
|
|
|
|||
|
|
type NumberMoreThanHalfObj struct{}
|
|||
|
|
|
|||
|
|
func (n *NumberMoreThanHalfObj) Doc() string {
|
|||
|
|
return `
|
|||
|
|
题目:
|
|||
|
|
|
|||
|
|
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
|
|||
|
|
|
|||
|
|
例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。
|
|||
|
|
|
|||
|
|
要求:时间复杂度O(N),空间复杂度O(1)
|
|||
|
|
`
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
func NumberMoreThanHalf(numList []int) int {
|
|||
|
|
var number, count int
|
|||
|
|
for _, j := range numList {
|
|||
|
|
if number == j {
|
|||
|
|
count++
|
|||
|
|
} else if number != j && count <= 1 {
|
|||
|
|
number = j
|
|||
|
|
} else {
|
|||
|
|
//number !=j && count >1
|
|||
|
|
count--
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//最后验证,确保一定超过
|
|||
|
|
countValid := 0
|
|||
|
|
for _, j := range numList {
|
|||
|
|
if j == number {
|
|||
|
|
countValid++
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if countValid <= len(numList)/2 {
|
|||
|
|
return -1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return number
|
|||
|
|
}
|