文章

46

粉丝

12

获赞

0

访问

3.4k

头像
2013年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年8月28日 22:22
阅读数 36

)算法基本设计思想

  1. 先排序:将数组排序,使相同元素连续分布(依赖排序算法,如快速排序)。
  2. 双指针遍历:用 i 标记当前连续段的起始位置,j 向后扫描至下一个不同元素,统计当前元素的连续长度 j-i
  3. 提前判定:若某元素的连续长度 超过 n/2,直接返回该元素;遍历结束无符合条件的元素则返回 -1

(2)C 语言算法实现(含排序 + 双指针逻辑)

c



// 快速排序(递归实现,使数组有序)
void quickSort(int A[], int low, int high) {
    if (low < high) {
        int p = partition(A, low, high);
        quickSort(A, low, p-1);  // 左半段排序
        quickSort(A, p+1, high); // 右半段排序
    }
}

// 找主元素(排序后双指针遍历)
int findMainItem(int A[], int n) {
    quickSort(A, 0, n-1); // 第一步:排序,使相同元素连续
    
    int i = 0;
    while (i < n) {
        int j = i;
        // 扫描连续相同元素的右端点
        while (j < n && A[j] == A[i]) {
            j++;
        }
        // 判定:连续长度是否超过 n/2
        if (j - i > n / 2) {
            return A[i]; // 满足条件,返回主元素
        }
        i = j; // 跳到下一个不同元素的起始位置
    }
    return -1; // 无主元素
}

(3)时间复杂度与空间复杂度

  • 时间复杂度:

    • 排序阶段:快速排序平均 O(nlogn)(最坏&n...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发