王道数据结构顺序表课后题,请问这样的思路和代码有错吗,复习的时候写的和答案不一样也不知道对不对,写的很潦草大家见谅
你的思路有点问题,A[n] 数组 n 要设置很大的范围,才能实现计数的目的,不合理。修改如下,供参考:
int Majority(seqlist* A)
{
int i, cnt, Num;
if (A->length == 0) return -1;
if (A->length == 1) return A->data[0];
for (i = 1, cnt = 1, Num = A->data[0]; i < A->length; i++){
if (A->data[i] == Num) // 找到出现次数最多的元素记入 Num
cnt++;
else
cnt--;
if (cnt == 0) {
Num = A->data[i];
cnt = 1;
}
}
for (i = 0, cnt = 0; i < A->length; i++) { // 判断 Num 是否是主元素
if (A->data[i] == Num) cnt++;
if (cnt > A->length / 2) return A->data[i];
}
return -1;
}
//复杂度:T(n) = O(n), S(n) = O(1)。
【以下回答由 GPT 生成】
我可以回答你的IT问题,请提问具体问题。
【相关推荐】