题目:
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
算法:
要先判断num[i] 是否与num1,num2相等,都不相等,再判断count1,count2是否为0,顺序很重要。
func majorityElement(nums []int) []int {
num1, num2 := 0, 0
count1, count2 := 0, 0
ans := make([]int, 0)
for i := 0; i < len(nums); i ++ {
if num1 == nums[i] {
count1 ++
} else if num2 == nums[i] {
count2 ++
} else if count1 == 0 {
num1 = nums[i]
count1 ++
} else if count2 == 0 {
num2 = nums[i]
count2 ++
} else {
count1 --
count2 --
}
// fmt.Println(num1,count1,num2,count2)
}
count1, count2 = 0, 0
for i := range nums {
if nums[i] == num1 {
count1 ++
}
if nums[i] == num2 {
count2 ++
}
}
if count1 * 3 > len(nums) {
ans = append(ans, num1)
}
if num1 != num2 && count2 * 3 > len(nums) {
ans = append(ans, num2)
}
return ans
}