LeetCode-day11-2813. 子序列最大优雅度

LeetCode-day11-2813. 子序列最大优雅度

题目描述

给你一个长度为 n 的二维整数数组 items 和一个整数 k 。

items[i] = [profiti, categoryi],其中 profiti 和 categoryi 分别表示第 i 个项目的利润和类别。

现定义 items 的 子序列 的 优雅度 可以用 total_profit + distinct_categories2 计算,其中 total_profit 是子序列中所有项目的利润总和,distinct_categories 是所选子序列所含的所有类别中不同类别的数量。

你的任务是从 items 所有长度为 k 的子序列中,找出 最大优雅度 。

用整数形式表示并返回 items 中所有长度恰好为 k 的子序列的最大优雅度。

注意:数组的子序列是经由原数组删除一些元素(可能不删除)而产生的新数组,且删除不改变其余元素相对顺序。

示例

示例1:

输入:items = [[3,2],[5,1],[10,1]], k = 2

输出:17

解释:

在这个例子中,我们需要选出长度为 2 的子序列。

其中一种方案是 items[0] = [3,2] 和 items[2] = [10,1] 。

子序列的总利润为 3 + 10 = 13 ,子序列包含 2 种不同类别 [2,1] 。

因此,优雅度为 13 + 22 = 17 ,可以证明 17 是可以获得的最大优雅度。

示例2:

输入:items = [[3,1],[3,1],[2,2],[5,3]], k = 3

输出:19

解释:

在这个例子中,我们需要选出长度为 3 的子序列。

其中一种方案是 items[0] = [3,1] ,items[2] = [2,2] 和 items[3] = [5,3] 。

子序列的总利润为 3 + 2 + 5 = 10 ,子序列包含 3 种不同类别 [1, 2, 3] 。

因此,优雅度为 10 + 32 = 19 ,可以证明 19 是可以获得的最大优雅度。

示例3:

输入:items = [[1,1],[2,1],[3,1]], k = 3

输出:7

解释:

在这个例子中,我们需要选出长度为 3 的子序列。

我们需要选中所有项目。

子序列的总利润为 1 + 2 + 3 = 6,子序列包含 1 种不同类别 [1] 。

因此,最大优雅度为 6 + 12 = 7 。

思路

采用贪心策略。

代码

java 复制代码
 public long findMaximumElegance(int[][] items, int k) {
        Arrays.sort(items,(a,b) -> b[0] - a[0]);
        long ans = 0;
        long totalProfit = 0;
        Set<Integer>  set = new HashSet<>();
        Deque<Integer> deque = new ArrayDeque<>();
        for (int i = 0; i < items.length; i++) {
            int profit = items[i][0];
            int category = items[i][1];
            if (i < k){
                totalProfit += profit;
                if (!set.add(category)){
                    deque.push(profit);
                }
            } else if (!deque.isEmpty() && set.add(category)) {
                totalProfit += profit - deque.pop();
            }
            ans = Math.max(ans,totalProfit+ (long) set.size() * set.size());
        }
        return ans;
    }
相关推荐
源码集结号9 分钟前
基于 Spring Boot + JPA + MySQL的上门家政系统代码示例
java·前端·后端
程序员老邢43 分钟前
【技术底稿 32】Nginx 经典大坑复盘:本机公网域名自环代理,导致接口返回首页 / 404 实战排障
java·运维·nginx·前后端分离·技术底稿·后端部署
斯内科1 小时前
四胞胎素数:找出‌个位数分别是 1、3、7、9‌,且‌十位及更高位数字完全相同‌的质数,例如 11、13、17、19
算法·质数·素数·四胞胎素数
该昵称用户已存在1 小时前
从成本中心到价值引擎:MyEMS 开源系统激活企业能源数据资产
java·后端·struts
Hello.Reader1 小时前
算法基础(十二)——主方法:快速求解常见递归式
算法
隐退山林1 小时前
JavaEE进阶:SpringBoot配置文件
java·spring boot·java-ee
阿维的博客日记2 小时前
求解深分页问题,last pk适合什么情况
java·mysql·深分页
小O的算法实验室2 小时前
2026年IEEE TITS,面向按需外卖配送调度的特定问题知识与基于学习元启发式算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
加勒比海带662 小时前
目标检测算法——农林行业数据集汇总附下载链接【Plant】
大数据·图像处理·人工智能·算法·目标检测
洛水水2 小时前
【力扣100题】23. 螺旋矩阵
算法·leetcode·矩阵