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

2611. 老鼠和奶酪

时间:2023-06-07 10:35:11浏览次数:51  
标签:老鼠 right 2611 index int 奶酪 datas left

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

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/mice-and-cheese
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

class Solution {


    private void swap(Data[] datas, int a, int b) {
        Data t = datas[a];
        datas[a] = datas[b];
        datas[b] = t;
    }

    private int[] partition(Data[] datas, int L, int R) {
        int pivot = datas[(int) (L + (R - L) * Math.random())].sub;
        int left = L - 1, right = R + 1;
        int index = L;
        while (index < right) {
            if (datas[index].sub > pivot) {
                swap(datas, index++, ++left);
            } else if (datas[index].sub == pivot) {
                index++;
            } else {
                swap(datas, index, --right);
            }
        }
        return new int[]{left + 1, right - 1};
    }

    private int topK(Data[] datas, int k) {
        int left = 0, right = datas.length - 1;
        while (left <= right) {
            int[] partition = partition(datas, left, right);
            if (k >= partition[0] && k <= partition[1]) {
                return datas[k].sub;
            } else if (k < partition[0]) {
                right = partition[0] - 1;
            } else {
                left = partition[1] + 1;
            }
        }
        return datas[left].sub;
    }

    public int miceAndCheese(int[] reward1, int[] reward2, int k) {
        if (reward1 == null || reward1.length == 0 || reward2 == null || reward2.length == 0 || reward1.length != reward2.length) {
            return 0;
        }
        int n = reward1.length;
        int sum = 0;
        Data[] datas = new Data[n];
        for (int i = 0; i < n; i++) {
            sum += reward2[i];
            datas[i] = new Data(reward1[i] - reward2[i], reward1[i], reward2[i]);
        }
        topK(datas, k - 1);
        for (int i = 0; i < k; i++) {
            sum += datas[i].sub;
        }
        return sum;
    }
}

class Data {
    int sub;
    int reward1;
    int reward2;

    public Data(int sub, int reward1, int reward2) {
        this.sub = sub;
        this.reward1 = reward1;
        this.reward2 = reward2;
    }
}

标签:老鼠,right,2611,index,int,奶酪,datas,left
From: https://www.cnblogs.com/tianyiya/p/17462611.html

相关文章

  • 【蓝桥杯集训·每日一题】AcWing 4309. 消灭老鼠
    写在前面本人CSDN博客主页:这里一、题目1、原题链接4309.消灭老鼠2、题目描述约翰的农场可以看作一个二维平面。农场中有n个老鼠,在毁坏着农田。第i个老鼠的位置坐标为(xi,yi)。不同老鼠可能位于同一位置。在(x0,y0)处,装有一个双向发射的激光枪,该位置没有老鼠。激光枪每次发......
  • 题目奶酪单
    Manacher模板:LuoguP3805反演:LuoguP3279总结......
  • P1433 吃奶酪-状压dp
    P1433吃奶酪-状压dp这是5.15晚自习的题目预习直接上题逝一逝吧放心,是对的代码P1433吃奶酪-洛谷|计算机科学教育新生态(luogu.com.cn)记录详情-洛谷|计算机科学教育新生态(luogu.com.cn)我真喜欢记忆化搜索(嘿嘿嘿)记忆化搜索的话,更容易理解dp[x][zt]设定为走到......
  • [SWPUCTF 2021 新生赛]老鼠走迷宫
    查壳:熟悉的配方,解包,反编译吧:进入.py文件:题目是走迷宫,进去后也发现了地图,那么我们将它打印出来:得到这么一张地图,那么看看起点和终点,起点:第一行第二个,终点:最后一行倒数第二个。画地图咯:得到Des='sssssddssddssaaaassssddwwddddssssssaawwaassssddssaassddddwwddssddwwwwwww......
  • PAT Basic 1107. 老鼠爱大米
    PATBasic1107.老鼠爱大米1.题目描述:翁恺老师曾经设计过一款Java挑战游戏,叫“老鼠爱大米”(或许因为他的外号叫“胖胖鼠”)。每个玩家用Java代码控制一只鼠,目标是抢吃尽可能多的大米让自己变成胖胖鼠,最胖的那只就是冠军。因为游戏时间不能太长,我们把玩家分成\(N\)组,每组......
  • 力扣---6364. 老鼠和奶酪
    有两只老鼠和 n 块不同类型的奶酪,每块奶酪都只能被其中一只老鼠吃掉。下标为i 处的奶酪被吃掉的得分为:如果第一只老鼠吃掉,则得分为 reward1[i] 。如果第二只老鼠吃掉,则得分为 reward2[i] 。给你一个正整数数组 reward1 ,一个正整数数组 reward2 ,和一个非负整数 k ......
  • P1433 吃奶酪 标签: 动态规划,dp | 状态压缩
    详见:https://www.luogu.com.cn/problem/P1433就不写基础原理了,直接看注释吧点击打开非map版#include<iostream>#include<cstdio>#include<cmath>#include<alg......
  • 1599 - 米老鼠偷糖果
       ......
  • 生活常识: 乳制品中芝士与奶酪的区别 All In One
    生活常识:乳制品中芝士与奶酪的区别AllInOne固态乳制品芝士披萨奶酪......
  • 鼠年识"鼠":这只辛苦的小"老鼠",你真的不想认识一下它吗
    2020年,农历庚子鼠年也!鼠年,咱们就来说说"鼠",不过此处我要说的这只"鼠",可不是偷吃东西的那个小贼鼠!而是你可能天天都在用的"鼠标"小盆友!对于鼠标,我们一般人都很......