求众数
加入了一个判断得到的元素到底是不是众数,也就是前面得到的数不一定是众数。
第一种方法:
class Solution {
public:
bool panduan(vector<int> &nums, int number)
{
int count = 0;
for (int i = 0; i<nums.size(); ++i)
{
if (nums[i] == number)
++count;
}
if (2 * count>nums.size())
return true;
return false;
}
int majorityElement(vector<int>& nums)
{
//求众数知道的有两种方法进行相应的计算
//第一种方法使用一些技巧
int len = nums.size();
int time = 1;
int result = nums[0];
for (int j = 1; j<len; ++j)
{
if (time == 0)
{
result = nums[j];
time = 1;
}
else if (result == nums[j])
++time;
else
--time;
}
if(panduan(nums, result))
return result;
else
return result;
}
};
第二种方法:
int partion(vector<int> &a,int low,int high)
{
int i=low;
int j=high;
int temp;
if(low<high)
{
temp=a[i];
while(i<j)
{
while(i<j&&temp<=a[j])
--j;
a[i]=a[j];
while(i<j&&temp>=a[i])
++i;
a[j]=a[i];
}
a[i]=temp;
}
return i;
}
int majorityElement(vector<int>& nums)
{
//使用快速排序的方法找到
int index;
int low=0;
int high=nums.size()-1;
int mid=(low+high)>>1;
index=partion(nums,low,high);
while(index!=mid)
{
if(index==mid)
return nums[index];
else if(index>mid)
index=partion(nums,low,index-1);
else
index=partion(nums,index+1,high);
}
return nums[index];
}
第二种方法数据量大的时候会出现超时