数组中超过一半的数字有很多解决的方式,排序之后求出中间值就是超过一半的数字,也可以通过Hash表统计每个数字出现的次数.我们尝试一种更简单的方式,初始化两个变量,一个记录数字,一个记录次数,如果遍历的数字和之前相当加1,如果不相同减1,如果为0 ,那么变量重新赋值.
func moreHalfNumber(data:[Int]) -> Int {
var num = 0
var count = 0
for i in 0..<data.count {
if count == 0 {
num = data[i]
count = 1
break
}
if num == data[i] {
count += 1
} else {
count -= 1
}
}
return num
}
var moreHalfData:[Int] = [2,3,4,5,6,2,2,2,2]
var moreNum = moreHalfNumber(moreHalfData)
print("FlyElephant:超过一半的数字:\(moreNum)")