给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
最笨的方法就是申请一个数组记录每个元素出现的次数,最后遍历这个数据取出数据最大的,但是第一感觉这是个笨方法。
考虑到go的map,可以直接统计到同一个key,上代码
func majorityElement(nums []int) int {
visited := make(map[int]int, len(nums)/2+1)
for i:=0;i<len(nums);i++{
visited[nums[i]]++
}
for k, v := range visited{
if v > len(nums) /2{
return k
}
}
return -1
}
这个的空间复杂度不是o(1),去看了官方思想,说了一个算法,求众数,但是提交运算后时间和空间复杂度是一样的消耗
func majorityElement(nums []int) int {
candidate := 0
count := 0
for i:=0;i<len(nums);i++{
if count == 0{
candidate = nums[i]
}
if candidate == nums[i]{
count++
}else{
count--
}
}
return candidate
}