题目:
数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。
来源:力扣(LeetCode)
链接:leetcode.cn/problems/fi…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
算法:
要考虑三个数的元素个数分别为n,n,1,最后抵消后,保留的为个数为1的数的情况
func majorityElement(nums []int) int {
num := nums[0]
count := 1
for i := 1; i < len(nums); i ++ {
if count == 0 {
num = nums[i]
count ++
continue
}
if num == nums[i] {
count ++
} else {
count --
}
}
if count <= 0 {
return -1
}
numCount := 0
for i := range nums {
if nums[i] == num {
numCount ++
}
}
if numCount >= (len(nums) + 1) / 2 {
return num
}
return -1
}