首页 > 其他分享 >Leetcode 2611. 老鼠和奶酪

Leetcode 2611. 老鼠和奶酪

时间:2023-06-07 19:12:58浏览次数:35  
标签:reward1 reward2 2611 老鼠 res 奶酪 吃掉 Leetcode

题目:

有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉。

下标为 i 处的奶酪被吃掉的得分为:

  • 如果第一只老鼠吃掉,则得分为 reward1[i] 。
  • 如果第二只老鼠吃掉,则得分为 reward2[i] 。
    给你一个正整数数组 reward1 ,一个正整数数组 reward2 ,和一个非负整数 k 。

请你返回第一只老鼠恰好吃掉 k 块奶酪的情况下,最大 得分为多少。

难度:简单

示例1:

输入:reward1 = [1,1,3,4], reward2 = [4,4,1,1], k = 2
输出:15
解释:这个例子中,第一只老鼠吃掉第 2 和 3 块奶酪(下标从 0 开始),第二只老鼠吃掉第 0 和 1 块奶酪。
总得分为 4 + 4 + 3 + 4 = 15 。
15 是最高得分。

示例2:

输入:reward1 = [1,1], reward2 = [1,1], k = 2
输出:2
解释:这个例子中,第一只老鼠吃掉第 0 和 1 块奶酪(下标从 0 开始),第二只老鼠不吃任何奶酪。
总得分为 1 + 1 = 2 。
2 是最高得分。

提示:

  • 1 <= n == reward1.length == reward2.length <= 105
  • 1 <= reward1[i], reward2[i] <= 1000
  • 0 <= k <= n

代码实现:

class Solution {
public:
    // 思路: 不是 鼠1 吃,就是鼠2 吃,因为计算 鼠1 吃 k 个的最大得分
    //       因此可以考虑 初始 res 表示全部给 鼠2 吃,然后对两者差值进行计算
    //       取出最大的 k 个,叠加到 res 即为最终值
    int miceAndCheese(vector<int>& reward1, vector<int>& reward2, int k) {
        // 元素为 reward1 - reward2;
        priority_queue<int> pq;  // 大根堆

        int res = 0;
        for(int i = 0; i < reward1.size(); ++i){
            pq.emplace(reward1[i] - reward2[i]);
            res += reward2[i];
        }

        while(k--){
            res += pq.top();
            pq.pop();
        }
        return res;
    }
};

标签:reward1,reward2,2611,老鼠,res,奶酪,吃掉,Leetcode
From: https://www.cnblogs.com/DL1024/p/17464304.html

相关文章

  • 【每日一题】LeetCode 859. 亲密字符串
    题目描述给你两个字符串s和goal,只要我们可以通过交换s中的两个字母得到与goal相等的结果,就返回true;否则返回false。交换字母的定义是:取两个下标i和j(下标从0开始)且满足i!=j,接着交换s[i]和s[j]处的字符。例如,在“abcd”中交换下标0和下标2的元素可以......
  • 【每日一题】LeetCode 390. 消除游戏
    题目列表arr由在范围[1,n]中的所有整数组成,并按严格递增排序。请你对arr应用下述算法:从左到右,删除第一个数字,然后每隔一个数字删除一个,直到到达列表末尾。重复上面的步骤,但这次是从右到左。也就是,删除最右侧的数字,然后剩下的数字每隔一个删除一个。不断重复这两步,从左到右......
  • 【每日一题】LeetCode 786. 第K个最小的素数分数(待补全题解思路)
    题目给你一个按递增顺序排序的数组arr和一个整数k。数组arr由1和若干素数组成,且其中所有整数互不相同。对于每对满足0<i<j<arr.length的i和j,可以得到分数arr[i]/arr[j]。那么第k个最小的分数是多少呢?以长度为2的整数数组返回你的答案,这里answer......
  • 【每日一题】LeetCode 438.找到字符串中所有字母异位词
    题目给定两个字符串s和p,找到s中所有p的异位词的子串,返回这些子串的起始索引。不考虑答案输出的顺序。异位词指由相同字母重排列形成的字符串(包括相同的字符串)。输入:s=“cbaebabacd”,p=“abc”输出:[0,6]解释:起始索引等于0的子串是“cba”,它是“abc”......
  • 【每日一题】LeetCode 458. 可怜的小猪(思路清奇)
    题目有buckets桶液体,其中正好有一桶含有毒药,其余装的都是水。它们从外观看起来都一样。为了弄清楚哪只水桶含有毒药,你可以喂一些猪喝,通过观察猪是否会死进行判断。不幸的是,你只有minutesToTest分钟时间来确定哪桶液体是有毒的。喂猪的规则如下:选择若干活猪进行喂养可以允许......
  • 【每日一题】LeetCode 1576.替换所有的问号
    题目给你一个仅包含小写英文字母和‘?’字符的字符串s,请你将所有的‘?’转换为若干小写字母,使最终的字符串不包含任何连续重复的字符。注意:你不能修改非‘?’字符。题目测试用例保证除‘?’字符之外,不存在连续重复的字符。在完成所有转换(可能无需转换)后返回最终的字......
  • 【每日一题】LeetCode 1185.一周中的第几天
    题目给你一个日期,请你设计一个算法来判断它是对应一周中的哪一天。输入为三个整数:day、month和year,分别表示日、月、年。您返回的结果必须是这几个值中的一个{“Sunday”,“Monday”,“Tuesday”,“Wednesday”,“Thursday”,“Friday”,“Saturday”}。示例输入:day=31,......
  • LeetCode 1790.仅执行一次字符串交换能否使两个字符串相等
    LeetCode1790.仅执行一次字符串交换能否使两个字符串相等思路暴力模拟,根据题目思路直接写代码即可,依次遍历字符串的每一位,如果相等则继续,如果不相同则分别储存在记录量flag1,flag2中,如果不同的位置超过两个或者只有一个则返回false,如果不存在不同位置或者不同的位置相同就返回tru......
  • 【每日一题】LeetCode 913.猫和老鼠(hard题)
    题目两位玩家分别扮演猫和老鼠,在一张无向图上进行游戏,两人轮流行动。图的形式是:graph[a]是一个列表,由满足ab是图中的一条边的所有节点b组成。老鼠从节点1开始,第一个出发;猫从节点2开始,第二个出发。在节点0处有一个洞。在每个玩家的行动中,他们必须沿着图中与所在当前......
  • LeetCode 481.神奇字符串
    LeetCode481.神奇字符串本题目应该说难在读题,根据题目描述的意思,s作为一个神奇字符串,他的每一组数都是根据前面的数去判定的,以开头的122之后为例,122之的末尾为2,而s的规则是1和2交替出现,所以后面应当跟着"1",而这一组"1"的数量则由其前面的"2"来决定,所以这一组有两个"1",同理,在这后面......