给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [3,2,3] 输出: 3 示例 2:
输入: [2,2,1,1,1,2,2] 输出: 2
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/majority-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
int qsort1(int *nums,int high,int low)
{
int temt = nums[low];
while(high>low)
{
while(high>low&&nums[high]>=temt) --high;
nums[low]=nums[high];
while(high>low&&nums[low]<=temt) ++low;
nums[high] = nums[low];
}
nums[low]=temt;
return low;
}
void Qsort2(int*nums,int high,int low,int k)
{
if(high>low)
{
int t = qsort1(nums, high, low);
//注意这里的不同,我们只是要找中间值,所以当确定中间位置在一个值位置的前面的时候,后面的就不用管了
if(t>k){
Qsort2(nums,t-1,low,k);
}else
{
Qsort2(nums,high,t+1,k);}
}
}
int majorityElement(int* nums, int numsSize){
//首先暴力法,肯定是可以的
//快速排序之后,直接找到中间的那个值:这样做的目的是让相同的数字集中起来
//一旦集中,多数元素的优势就出来了,无论怎么搞,你肯定在中间得位置上
if (numsSize==1)
return nums[0];
int k=numsSize/2;
Qsort2(nums,numsSize-1,0,k);
return nums[k];
}