第十届蓝桥杯大赛软件类省赛研究生组 试题H:修改数组

第十届蓝桥杯大赛软件类省赛研究生组 试题H: 修改数组

问题描述:

给定一个长度为N的数组A=[A1,A2,···AN],数组中有可能有重复出现的整数。现在小明要按以下方法将其修改为没有重复整数的数组。
小明会依次修改A2,A3,···,AN。当修改Ai时,小明会检查Ai是否在A1∼Ai−1中出现过。
如果出现过,则小明会给Ai加上1;如果新的Ai仍在之前出现过,小明会持续给Ai加1,直到Ai没有在A1∼Ai−1中出现过。
当AN也经过上述修改之后,显然A数组中就没有重复的整数了。现在给定初始的A数组,请你计算出最终的A数组。

这道题LeetCode有类似的,只是表达方式不同。

算法思想

1.定义一个unordered_map<int,int> 来存储不重复的输入数据和频率。
2.当输入一个数,判断当前数是否在map中,如果输入的数(key)对应的value ==1 ,则让输入的数字+1,如此往复。
3.在map中,插入不重复的元素。

C/C++实现

void no_repeat(){
    int n = 0,temp;
    cin >> n;
    int m[n];
    unordered_map<int,int> ele;
    for(int i = 0;i < n;i++){
        cin >> temp;
        while (ele[temp] == 1) temp++;
        ele[temp] = 1;
        m[i] = temp;
    }
    for(int i = 0;i < n;i++){
        cout << m[i] << " ";
    }
}
原文地址:https://www.cnblogs.com/outxiao/p/13671814.html