📅  最后修改于: 2023-12-03 14:59:49.467000             🧑  作者: Mango
本文介绍了如何使用C++程序检查已排序数组中是否存在多数元素。
多数元素是指在数组中出现次数超过一半的元素。
我们可以使用Moore投票算法来查找多数元素。该算法可在线性时间O(n)内找到具有多数元素的数组。
算法的基本思想是:维护一个计数器,同时迭代整个数组。每当我们遇到与计数器中保存的数字相同的数字时,我们将计数器的值增加1;否则,我们将计数器的值减少1。如果计数器的值变为0,则当前数字成为新的计数值。最后,保存在计数器中的数字将是具有多数元素的数字。
用C++实现该算法的代码如下:
int findMajorityElement(vector<int>& nums) {
int count = 0;
int candidate = 0;
for (int num : nums) {
if (count == 0) {
candidate = num;
}
count += (num == candidate) ? 1 : -1;
}
return candidate;
}
以下是三组测试样例:
输入:[1, 2, 2, 2, 3]
输出:2
输入:[1, 1, 2, 2, 2, 2, 3, 3, 3]
输出:2
输入:[1, 2, 3, 4, 5, 6, 7, 8, 9]
输出:没有多数元素
本文介绍了如何使用C++程序检查已排序数组中是否存在多数元素。我们使用Moore投票算法来查找多数元素,该算法可在线性时间O(n)内找到具有多数元素的数组。
值得注意的是,这种算法仅适用于已排序的数组。如果数组未排序,则需要先对其进行排序。