提问: 给定一个int型数组,找出该数组中出现次数大于数组长度一半的int值。
解决方案: 遍历该数组,统计每个int值出现次数,再遍历该数组,找出出现次数大于数组长度一半的int值。
两种线性解法:
一种是放入一个哈希表中,然后同数加一,
还有一种就是遍历数组,然后发现相同就给maj
加一,如果不同就减一,到0
就把结果换成变成0
的数,最后得到的数就是答案。
class Solution {
func majorityElement(_ nums: [Int]) -> Int {
var maj = 0
var num = nums[0]
for n in nums {
if num == n {
maj = maj + 1
} else {
if maj > 0 {
maj = maj - 1
} else {
num = n
}
}
}
return num
}
}