Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋
times.
You may assume that the array is non-empty and the majority element always exist in the array.
题意就是找到数组里出现超过一半次数的数 这个数组非空,且一定存在这一个数。
一开始是用map来做,但是效果并不理想。考虑到map本身操作的耗时
public class Solution {
public int majorityElement(int[] nums) {
if(nums.length==1) return nums[0];
Map<Integer,Integer> map=new HashMap<Integer,Integer>();
for(int i:nums){
if(map.containsKey(i)){
int c=map.get(i)+1;
if(c>nums.length/2) return i;
map.put(i,c);
}else{
map.put(i,1);
}
}
return 0;
}
}
后来考虑到使用计数。既然超过n/2 ,那么一定是次数最多的,使用计数器优化
class Solution {
public:
int majorityElement(vector<int>& nums) {
int result=0;
int count=0;
for(int i=0;i<nums.size();i++){
if(count==0){
result=nums[i];
count++;
}else{
if(result==nums[i]){
count++;
}else{
count--;
}
}
}
return result;
}
};