剑指 Offer 39. 数组中出现次数超过一半的数字
2022-03-14 本文已影响0人
邦_
最简单的想法是= = 双循环 每次循环创建个临时变量来计数,当次数大于数组的一半的时候,返回这个数
func majorityElement(_ nums: [Int]) -> Int {
for i in nums {
var count = 0
for j in nums {
if i == j {
count += 1
}
}
if count > nums.count / 2 {
return i
}
}
return 0
}
还有一种方法,因为出现次数大于数组长度的一半,所以排序后会在长度一半的地方重叠
func majorityElement(_ nums: [Int]) -> Int {
//相当于是从小到大排序
let temp = nums.sorted()
return temp[nums.count / 2]
}
还有就是用字典记录次数 找出来出现次数大于数组长度一半的
func majorityElement(_ nums: [Int]) -> Int {
var dict = [Int:Int]()
if nums.count == 1 {
return nums[0]
}
for num in nums {
if dict.keys.contains(num) {
dict[num]! += 1
if dict[num]! > nums.count / 2 {
return num
}
}
else {
dict[num] = 1
}
}
return 0
}