229. 求众数 II
题目描述:
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
考察重点:设超过 ⌊ n/3 ⌋ 次的元素有a个,则一定有 ⌊ n/3 ⌋ * a < n。即这种元素至多存在2个。
先用摩尔投票法求出最多的两个元素,再判断二者是否超过 ⌊ n/3 ⌋ 。
func majorityElement(nums []int) []int {x, y, lx, ly, len := 0, 0, 0, 0, len(nums)/3for _, num := range nums {if (x == num || lx == 0) && num != y {x = numlx++} else if y == num || (ly == 0) {y = numly++} else {lx--ly--}}lx, ly = 0, 0for _, num := range nums {if num == x {lx++}if num == y {ly++}}res := []int{}if lx > len{res = append(res, x)}if ly > len && x != y{res = append(res, y)}return res
}