Majority Element
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.
方法一:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int majorityElement(vector<int>& nums) {
int n;
int q;
int W;
sort( nums.begin(), nums.end());
n = nums.size();
if( n == 1)
{
W = nums[0];
return W;
}
q = n / 2;
for(int i = 0; i < q + 1; i++)
{
if(nums[i] == nums[i+q])
{
W = nums[i];
return W;
}
}
}
int main (){
vector<int> nums;
int n;
int x;
int W;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> x;
nums.push_back(x);
}
W = majorityElement(nums);
cout << W;
}
先将vector容器之内的数值进行sort排序;
产生形如AABBBCCCCCC的形式;
然后通过for循环依次扫描nums[0]到nums[n/2]并逐个使其nums[i]与他们后边的nums[i+n/2]进行比较,相等即返回;
for(int i = 0; i < q + 1; i++)
{
if(nums[i] == nums[i+q])
{
W = nums[i];
return W;
}
}
方法一其中使用了一个sort排序;导致了runtime增加
方法二:
majority element 的数量一定比其他 not majority element 的数量多;
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int majorityElement(vector<int>& nums) {
int sentry;
int time = 0;
for(int i = 0; i < nums.size(); i++){
if( time == 0){
sentry = nums[i];
time ++;
}
else{
if( sentry == nums[i])
time++;
else
time--;
}
}
return sentry;
}
int main (){
vector<int> nums;
int n;
int x;
int W;
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> x;
nums.push_back(x);
}
W = majorityElement(nums);
cout << W;
}