📅  最后修改于: 2023-12-03 15:14:01.701000             🧑  作者: Mango
本文介绍了如何使用 C++ 编程语言来计算一个有序数组的众数。众数是指在数组中出现次数最多的数字。
为了计算有序数组的众数,我们可以使用一种简单而高效的算法,称为「二分查找法」。该算法的基本思想是在数组中查找目标数字的起始位置和结束位置,然后根据这两个位置计算出该数字在数组中出现的次数。
具体步骤如下:
start
。end
。end - start + 1
。根据上述算法,我们可以使用循环来找到所有众数。
#include <iostream>
#include <vector>
using namespace std;
// 二分查找目标数字第一次出现的位置
int findFirst(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
// 二分查找目标数字最后一次出现的位置
int findLast(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
while (left < right) {
int mid = left + (right - left + 1) / 2;
if (nums[mid] > target) {
right = mid - 1;
} else {
left = mid;
}
}
return left;
}
// 计算有序数组的众数
vector<int> findMode(vector<int>& nums) {
vector<int> modes;
int n = nums.size();
int count = 1;
for (int i = 0; i < n; i++) {
int start = findFirst(nums, nums[i]);
int end = findLast(nums, nums[i]);
count = end - start + 1;
if (count > n / 2) {
modes.push_back(nums[i]);
}
}
return modes;
}
int main() {
vector<int> nums = {1, 2, 2, 2, 3, 4, 4, 5, 5, 5};
vector<int> modes = findMode(nums);
cout << "众数: ";
for (int i = 0; i < modes.size(); i++) {
cout << modes[i] << " ";
}
return 0;
}
上述代码示例中,我们先定义了 findFirst()
和 findLast()
两个函数来实现二分查找的功能。然后,通过 findMode()
函数来计算有序数组的众数。最后,在 main()
函数中调用 findMode()
来输出众数。
以上就是用 C++ 编程语言计算有序数组众数的方法和代码示例。你可以根据自己的实际需求修改代码,并且可以通过此方法来计算其他类型的众数。希望本文对你有所帮助!