interview17.10 主要元素
1.题目
数组中占比超过一半的元素称之为主要元素。给定一个整数数组,找到它的主要元素。若没有,返回-1。
2.算法
3.排序算法 + 计数器
解题思路:从题干分析,我们需要找到数组中数量占比多于一半(numsSize % 2 + 1)的数字。由于数字是随机的并且取值范围较大,因此不适合使用桶计数。可以先将数组进行排序,然后遍历一遍数组,统计每种数字的数量,如果数量多于一半,就输出当前的数据即可。
步骤1:使用qsort排序。初始化一个统计变量count
步骤2:从数组左端开始遍历,检查当前数字nums[i]与上一个数字nums[i - 1]之间的关系
步骤3:若nums[i] != nums[i - 1]。统计count是否多于一半,如果多于一半则输出nums[i - 1]。如果少于一半,则count清为1。
步骤4:若nums[i] == nums[i - 1]。count自增1。
int sort_up(const void *a, const void *b)
{return *(int *)a - *(int *)b;
}int majorityElement(int* nums, int numsSize){if (numsSize == 1)return *nums;int count = 1;qsort(nums, numsSize, sizeof(int), sort_up);for(int i = 1; i < numsSize; i++) {if (nums[i] == nums[i - 1])count++;elsecount = 1;if (count > numsSize % 2)return nums[i];}return -1;
}