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<stdio.h>
void sort(int num[], int low, int high){
if(low < high){
int val = num[low], i = low, j = high;
while(i < j){
while(num[j] >= val && i < j) j--;
if(i < j) num[i++] = num[j];
while(num[i] < val && i < j) i++;
if(i < j) num[j--] = num[i];
}
num[i] = val;
sort(num, low, i-1);
sort(num, i+1, high);
}
}
//先排序再找,时间复杂度太高,超时了
int majorityElement1(int num[], int n) {
sort(num, 0, n-1);
return num[n/2];
}
//这个方法accepted了
int majorityElement(int num[], int n) {
int result = 0;
int time = 0 ,i;
for(i = 0; i < n; i++) {
if(time == 0) {
result = num[i];
time++;
}
else {
if(num[i] == result) time++;
else time--;
}
}
return result;
}
void main(){
int num[] = {3,3,3,3,3,3,3,1,1,1,22,122,11,15,1,2,3,3,3,3,4};
int n = 21, i;
printf("%d\n", majorityElement(num,n));
}