用c++编写给一个整数序列,每个元素出现的次数叫重数,重数最多的元素叫众数。对一个递增的有序序列求众数。S={1, 2, 2, 2, 3, 5},S的众数2, 重数是3。
时间: 2024-09-17 13:09:41 浏览: 60
在C++中,要解决这个问题,你可以采用一种简单的方法,即遍历数组一次并同时维护一个最大值以及它的计数。由于输入序列是有序且递增的,这意味着一旦遇到第一个重复的元素,之后的所有同数值都会是该元素的候选众数。我们可以在遍历过程中更新最大计数和众数。
以下是简单的C++代码实现:
```cpp
#include <iostream>
using namespace std;
int findMode(vector<int>& nums) {
if (nums.empty()) return -1; // 如果数组为空,返回-1表示无众数
int maxCount = 1, mode = nums[0], currentCount = 1;
for (size_t i = 1; i < nums.size(); ++i) {
if (nums[i] == nums[i - 1]) { // 如果当前元素等于前一个元素
currentCount++;
} else { // 如果不等于,比较当前计数是否大于之前的最大计数
if (currentCount > maxCount) {
maxCount = currentCount;
mode = nums[i - 1]; // 更新模式为之前的元素
}
currentCount = 1; // 重置当前计数
}
}
// 检查最后一个元素,可能存在未检查的情况
if (currentCount > maxCount) {
maxCount = currentCount;
mode = nums[nums.size() - 1];
}
return mode;
}
int main() {
vector<int> s = {1, 2, 2, 2, 3, 5};
int result = findMode(s);
cout << "数组的众数是:" << result << endl;
return 0;
}
```
当你运行这段代码,它会找到输入数组`S`的众数,即2,因为2是最频繁出现的元素并且其出现了3次。
阅读全文