17.10.主要元素
数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。
示例 1:
输入:[1,2,5,9,5,9,5,5,5] 输出:5
示例 2:
输入:[3,2] 输出:-1
示例 3:
输入:[2,2,1,1,1,2,2] 输出:2
思路:先进行(快速)排序,再判断相等的个数是否大于一半
void quick_sort(int* q,int l,int r){
if (l>=r) return;
int i=l-1,j=r+1,x=q[l+r>>1],temp;
while (i<j){
do i++; while(q[i]<x);
do j--; while(q[j]>x);
if (i<j){
temp = q[i];
q[i] = q[j];
q[j] = temp;
}
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
return;
}
int majorityElement(int* nums, int numsSize){
quick_sort(nums,0,numsSize-1);
int mid=numsSize/2;
for (int i = 0; i+mid < numsSize; ++i) {
if( nums[i] == nums[i+mid] ){
return nums[i];
}
}
return -1;
}
别人的其他思路:
摩尔投票法,只要不相同,就相互抵消;
哈希表,遍历一次将出现的元素和对应的次数存储起来,然后再遍历次数如果大于一半,则返回对应元素