LeetCode·每日一题·2383. 赢得比赛需要的最少训练时长·贪心

该文章提供了一个LeetCode问题的解决方案,涉及在初始化时给予变量适当的值,以便在经过一系列加减操作后,两个变量都能超过对手的对应值。策略是每次取最小的任意值以确保局部和全局最优解,并返回所有这些任意值的总和。
摘要由CSDN通过智能技术生成

作者:小迅

链接: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)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

题目

示例

思路

题意 -> 给定两个数组,和两个变量,一个变量加数组值,一个变量减数组值,初始化是可以给变量加任意值,返回使得最后两个变量不为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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值