0001 void candidate(Vector<int> A, int& maj) { //多数元素的初筛 0002 for (Rank c = 0, i = 0; i < A.size(); i++) //用c记录maj与其他元素的数量差额 0003 if (0 < c) { maj == A[i] ? c++ : c--; } //通常,只需在前缀的内部更新差额计数器 0004 else { maj = A[i]; c = 1; } //计数器一旦归零,当前的前缀即可剪除,候选者改作当前元素 0005 } //多数元素若存在,则只能是maj(若将“多数”放宽至“至少一半”,则末元素也需同时返回并接受验证)