之前用的方法:
- 数组排序:排序后数组中点的数一定为众数。
- Map统计长度,大于数组一半长度是众数。时间空间复杂度均O(N)
今天学到了摩尔投票算法(隐约记得高中数学老师提到过)
核心理念为 “正负抵消” ;时间和空间复杂度分别为 O(N) 和 O(1);是本题的最佳解法。
class Solution {
public int majorityElement(int[] nums) {
int v=0,x=0;
for(int num:nums){
if(v==0){x=num;}
v+=num==x?1:-1;
}
return x;
}
}