原题链接:Majority Element
题解(二逼版):
class Solution {
public:
int majorityElement(vector<int>& nums) {
/*
Time Complexity:O(nlogn)
Space Complexity:O(1)
*/
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};
题解二(进阶版)
class Solution {
public:
int majorityElement(vector<int>& nums) {
/*
思路:借用一个辅助字典,保存并计数,如果计数大于sz/2就返回
Time Complexity:O(N)
Space Complexity:O(N)
*/
map<int,int>mm;
int sz=nums.size();
for(int i=0;i<sz;i++)if(++mm[nums[i]]>sz/2)return nums[i];
}
};
题解三(牛人版):
class Solution {
public:
int majorityElement(vector<int>& nums) {
/*
思路:保存一个主元素,遍历,如果值相同count+1,否则count-1,当count=-1时,说明嘿,哥们,该换一个主元素了
Time Complexity:O(N)
Space Complexity:O(1)
*/
int tmp=nums[0];
int sz=nums.size();
int count=0;
for(int i=0;i<sz;i++){
if(nums[i]==tmp)count++;
else{
if(--count==-1){
tmp=nums[i];
count=1;
}
}
}
return tmp;
}
};