给定一个整数数组 nums,你可以对每个元素进行一次操作(+1 或 -1)或不操作,目标是让尽可能多的元素变成同一个数。求这个数出现的次数
每个数可以:+1,-1,不变,操作只能选一种,不能多次操作;最终的目标是统计某个数通过这些变换后出现的总次数。
知识点:
map 容器中存储的数据是有序的,而 unordered_map 容器中是无序的。
unordered_map
1、优点:因为内部实现了哈希表,因此其查找速度非常的快。
2、缺点:哈希表的建立比较耗费时间
3、适用处:对于查找问题,unordered_map 会更加高效一些,因此遇到查找问题,常会考虑一下用unordered_map
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int maxFrequencyAfterOneOperation(vector<int>& nums) {
unordered_map<int, int> freq;
// 统计原始频率
for (int num : nums) {
freq[num]++;
}
int maxCount = 0;
// 遍历所有存在的数字
for (auto& f: freq) {
int total = f.second; // num -> num(不变)
if (freq.count(f.first - 1)) total += freq[f.first - 1]; // num-1 -> num(+1)
if (freq.count(f.first + 1)) total += freq[f.first + 1]; // num+1 -> num(-1)
maxCount = max(maxCount, total);
}
return maxCount;
}
int main() {
vector<int> nums1 = { 1, 2, 3 };
cout << "示例1 输出:" << maxFrequencyAfterOneOperation(nums1) << endl; // 应为 3
vector<int> nums2 = { 5, 5, 5 };
cout << "示例2 输出:" << maxFrequencyAfterOneOperation(nums2) << endl; // 应为 3
vector<int> nums3 = { 1, 1, 2, 2, 3 };
cout << "示例3 输出:" << maxFrequencyAfterOneOperation(nums3) << endl; // 应为 5
return 0;
}
浙公网安备 33010602011771号