169 Majority Element
链接:https://leetcode.com/problemset/algorithms/
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.
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
Hide Tags Divide and Conquer Array Bit Manipulation
这个问题是求n个元素的数组中元素重复出现次数大于n/2的元素。我的想法是排序后取第[n/2]个元素就可以了。采用快排可以提高效率,使用c中的qsort可以AC,
int cmp(const void *a, const void *b)
{
return(*(int *)a-*(int *)b);
}
int majorityElement(int* nums, int numsSize) {
qsort(nums,numsSize,sizeof(int),cmp);
return nums[numsSize/2];
}
但是我用自己的快排算法就出现超时的问题,还没想到优化的策略,代码先贴上,以后优化了再来改吧。
void msort(int *a,int size)
{
if(size<=1) return ;
int key=a[0],i=1,j=size-1;
while(i!=j)
{
while(key>a[j]&&j>i)
j--;
while(a[i]>=key&&i<j)
i++;
if(i!=j)
{
int k=a[i];
a[i]=a[j];
a[j]=k;
}
}
if(a[j]>key)
{
a[0]=a[i];
a[i]=key;
}
msort(a,i);
msort(a+1,size-i);
}
int majorityElement(int* nums, int numsSize) {
msort(nums,numsSize);
return nums[numsSize/2];
}