给定一个大小为 n
的数组 nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
**输入:** nums = [3,2,3]
**输出:** 3
示例 2:
**输入:** nums = [2,2,1,1,1,2,2]
**输出:** 2
提示:
n == nums.length
1 <= n <= 5 * 104
-109 <= nums[i] <= 109
进阶: 尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。
思路:投票算法,两两消去,最后肯定剩下众数
class Solution {
public int majorityElement(int[] nums) {
int ans=nums[0],volt=0;
for(int i=0;i<nums.length;i++){
if(volt==0){
ans=nums[i];
}
if(ans==nums[i])
volt++;
else
volt--;
}
return ans;
}
}
方法2:分治算法。分到数组长度为1,则直接返回,否则接着递归,得到左区间的值和右区间的值,如果左右区间值相同则返回,不同则在左右对应区间内统计左值和右值的数量,决定返回哪个值