题解 | 数组中出现次数超过一半的数字
数组中出现次数超过一半的数字
https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163
package main
import (
// "sort"
)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param numbers int整型一维数组
* @return int整型
*/
func MoreThanHalfNum_Solution(numbers []int) int {
// write code here
// sort.Ints(numbers) // 升序
// sort.Slice(numbers, func(i, j int) bool{
// return numbers[i] > numbers[j] // 降序
// })
// numbers = QiuckSort(numbers)
// len := len(numbers)
// return numbers[(len) / 2]
// return Hash(numbers)
// 投票法
return Vote(numbers)
}
func Vote(numbers []int) int {
count := 1
res := numbers[0]
for _, val := range numbers[1:] {
if val == res {
count++
} else {
count--
}
if count == 0 {
count = 1
res = val
}
}
return res
}
func Hash(numbers []int) int {
hash := make(map[int]int)
for _, val := range numbers {
hash[val]++
}
maxKey := 0
maxVal := 0
for key, val := range hash {
if val >= maxVal {
maxKey = key
maxVal = val
}
}
return maxKey
}
func QiuckSort(numbers []int) []int {
if len(numbers) <= 1 {
return numbers
}
pre := numbers[0]
var left, right []int
for _, val := range numbers {
if val < pre {
left = append(left, val)
} else {
right = append(right, val)
}
}
return append(append(left, pre), right...)
}

