数组中出现次数超过一半的数字(摩尔投票)
问题简述
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
思路1:排序
排序后,数组中间位置的数一定满足题意;
时间复杂度
O(NlogN)
;
思路2:计数
一次遍历,记录每个数出现的次数;
空间复杂度
O(N)
;
思路3:“摩尔投票法”
“摩尔投票法”的核心思想是一一抵消;
假设已知目标数为 x,遍历时若出现一次 x 记
+1
票,否则为-1
票;推论1:最终票数和必大于 0;
推论2:若前 n 个数的票数和为 0,那么剩余部分依然满足推论1,即目标数字依然为 x;
思路4:分治
本题使用分治在时间和空间上都不是最优,仅用于理解分治的思想;
Last updated