给定一个大小为 n 的数组 M,返回其中的多数元素。多数元素是指在数组中出现次数 大于n/2的元素。
条件:数组一定是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3,3,4]
输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2,2,1]
输出:2
解题思路: 通过先排序,在找出其中连续的相等的数目最大的数值返回。
源码:
// Len_MajElement.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int MajElement2(vector<int>& nums)
{
sort(nums.begin(), nums.end());
int len = nums.size();
int pos = 0;
int count = 1;
for (int i = pos + 1; i < len; i++)
{
if (nums[pos] == nums[i])
{
count++;
}
else
{
if (count > (len / 2))
{
return nums[i - 1];
}
pos = i;
}
}
return nums[pos];
}
int main()
{
vector<int> M = { 3,2,3,3,4 };
int Result = MajElement2(M);
printf("Result = %d\n", Result);
M.clear();
M = { 2,2,1,1,1,2,2,2,1 };
Result = MajElement2(M);
printf("Result = %d\n", Result);
}
执行结果:
还有没有开销更小的算法?求指教