第一题 牛牛打怪
*题目描述 *
牛牛在各个平台被各种传奇游戏的广告轰炸,所以他决定去玩一玩这类的游戏。这类游戏挂机就可以升级,所以牛牛每天都能变强。在第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; } };