作者:小迅
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
示例
思路
题意 -> 给定两个数组,和两个变量,一个变量加数组值,一个变量减数组值,初始化是可以给变量加任意值,返回使得最后两个变量不为0的任意值。
题目虽然说是在初始化时给任意值,但是其实应该在每一次加减数组元素时进行取任意值操作,因为要求任意值最小,所有每次取任意值时只取正好满足题意的值 - 需要在经验和精力上都 严格 超过对手才能击败他们 (局部最优)。由于之前每一步都是取最小值,所有最后返回任意值累和 (整体最优)。
代码注释超级详细
代码
int minNumberOfHours(int initialEnergy, int initialExperience, int* energy, int energySize, int* experience, int experienceSize){
int ans = 0;
for (int i = 0; i < energySize; ++i) {
if (initialEnergy <= energy[i] || initialExperience <= experience[i]) {
ans += ((energy[i] - initialEnergy) < 0 ? 0 : (energy[i] - initialEnergy + 1));//取最小任意值
ans += ((experience[i] - initialExperience) < 0 ? 0 : (experience[i] - initialExperience + 1));//取最小任意值
initialEnergy = initialEnergy <= energy[i] ? energy[i] + 1 : initialEnergy;//重新赋精力和经验
initialExperience = initialExperience <= experience[i] ? experience[i] + 1 : initialExperience;
}
initialEnergy -= energy[i];//操作对应数值
initialExperience += experience[i];
}
return ans;
}
作者:小迅
链接:https://leetcode.cn/problems/minimum-hours-of-training-to-win-a-competition/solutions/2164881/tan-xin-zhu-shi-chao-ji-xiang-xi-by-xun-8hc1a/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。