0
点赞
收藏
分享

微信扫一扫

LeetCode—229. 求众数 II

何晓杰Dev 2022-04-21 阅读 134
leetcodego

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)/3
	for _, num := range nums {
		if (x == num || lx == 0) && num != y {
			x = num
			lx++
		} else if y == num || (ly == 0) {
			y = num
			ly++
		} else {
			lx--
			ly--
		}
	}
	lx, ly = 0, 0
	for _, 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
}
举报

相关推荐

0 条评论