文章
57
粉丝
0
获赞
0
访问
6.9k
先对数组进行排序,使相同元素相邻排列,然后通过一次线性扫描统计连续相同元素的出现次数。如果某个元素的出现次数超过数组长度的一半(n/2),则该元素就是主元素。
具体步骤如下:
排序阶段:使用快速排序等高效排序算法将数组按升序排列,使所有相同元素相邻
扫描统计阶段:遍历排序后的数组,统计连续相同元素的个数
主元素判定:在遍历过程中实时跟踪最大出现次数及对应元素,最终验证是否满足主元素条件
// 快速排序实现
void QuickSort(int A[], int L, int R) {
if (L >= R) return; // 递归终止条件:左索引大于等于右索引
// 随机选择基准元素,避免最坏情况
int pivot_index = rand() % (R - L + 1) + L;
int pivot = A[pivot_index];
// 将基准元素交换到最左边
int temp = A[L];
A[L] = A[pivot_index];
A[pivot_index] = temp;
int i = L, j = R;
while (i < j) {
// 从右向左找第一个小于基准的元素
while (i < j && A[j] >= pivot) j--;
if (i < j) A[i++] = A[j];
// 从左向右找第一个大于等于基准的元素
while (i < j &&...
登录后发布评论
暂无评论,来抢沙发