给定一个整数数组 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;
}

  

posted @ 2025-07-12 15:04  最近饭吃的很多  阅读(148)  评论(0)    收藏  举报