第一题 牛牛打怪

*题目描述 *

牛牛在各个平台被各种传奇游戏的广告轰炸,所以他决定去玩一玩这类的游戏。这类游戏挂机就可以升级,所以牛牛每天都能变强。在第i天里,牛牛能杀死防御力小于等于i的怪物。但由于牛牛还要刷题,所以牛牛每天最多杀一只怪物。这个游戏共有n只怪物,每只怪物的防御力为DEF[i],牛牛想知道最少要到第几天才能把这n只怪物都杀死。

示例1
输入 2,[7,3]
返回值 7
说明:
牛牛可以在第3天杀死一只防御力为3的怪物,在第7天杀死一只防御力为7的怪物。所以牛牛最少能在第7天把这些怪物全杀死。

题目解析
我的想法是,找到最大的怪,因为最大的怪,需要的时间最长,同时找到重复战斗力的怪,在最大的怪的基础上加上重复战斗力的怪,最终输出的就是答案;
可是我的代码没有实现我的想法,总是无法通过所有的测试案例。
最终看了直播,大佬的解法如下:大佬在比较的过程中计算了重复的怪,非常神奇!优秀!学到了!

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n int整型 
     * @param DEF int整型vector 
     * @return int整型
     */
    int Minimumdays(int n, vector<int>& DEF) {
        // write code here
        if(n==1)
            return DEF[0];
        set<int> a;
        for(auto x:DEF)
        {
            a.insert(x);
        }
        int num=n-a.size();
        sort(DEF.begin(),DEF.end());
        return DEF[n-1]+num;
    }
};

最后附上我的垃圾代码,希望哪位大佬指点一下:只能通过33.33%

public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n int整型 
     * @param DEF int整型vector 
     * @return int整型
     */
    int Minimumdays(int n, vector<int>& DEF) {
        // write code here 
        sort(DEF.begin(),DEF.end());
        set<int> a;
        for(auto x:DEF)
            a.insert(x);
        int num=n-a.size();
        return DEF[n-1]+num;
    }
};