最原始思路:Map,之后统计
class Solution {
public int majorityElement(int[] nums) {
Map<Integer, Long> map = Arrays.stream(nums).boxed().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
long limit = nums.length >> 1;
for (Map.Entry<Integer, Long> entry : map.entrySet())
if (entry.getValue() > limit)
return entry.getKey();
return -1;
}
}
看看投票法,好简单
首先是思想
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
major = 0
count = 0
for n in nums:
if count == 0:
major = n
if n == major:
count = count + 1
else:
count = count - 1
return major
/*
复杂度
时间复杂度:O(n),仅遍历一次数组
空间复杂度:O(1),没有使用额外空间
*/
Java
class Solution {
public int majorityElement(int[] nums) {
if(nums.length<=1){
return nums[0];
}
int major=nums[0],count=1;
//major表示候选人,count表示当前候选人的票数
for(int i=1;i<nums.length;i++){
if(nums[i]==major)
count++;
else
count--;
if(count<0){
major=nums[i];
count=1;
}
}
return major;
}
}