反悔贪心,LeetCode 2813. 子序列最大优雅度

一、题目

1、题目描述

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

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

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

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

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

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

2、接口描述

python3
 ​
class Solution:def findMaximumElegance(self, items: List[List[int]], k: int) -> int:
cpp
 ​
class Solution {
public:long long findMaximumElegance(vector<vector<int>>& items, int k) {}
};
js
 ​
/*** @param {number[][]} items* @param {number} k* @return {number}*/
var findMaximumElegance = function(items, k) {};

3、原题链接

2813. 子序列最大优雅度


二、解题报告

1、思路分析

比较经典的堆式反悔贪心

如何考虑?

我们的收益来自于序列中的profit和以及不同的种类数

这样如何决策?

我们初始先将物品按照profit降序排序

然后取前k个,后面进行反悔贪心

后面物品的profit不会比前面大,如果想要让整体变大,除非种类变多

所以,我们记录前k个元素构成序列中的重复元素,然后如果后面的元素种类是新的,我们就拿掉最小的一个重复元素和其替换

过程中维护最大值即可

2、复杂度

时间复杂度: O(NlogN)空间复杂度:O(N)

3、代码详解

python3
 ​
class Solution:def findMaximumElegance(self, items: List[List[int]], k: int) -> int:items.sort(key=lambda x: -x[0])res = s = 0st = set()cur = []for i, (p, c) in enumerate(items):if i < k:s += pif c in st:cur.append(p)else:st.add(c)elif c not in st and cur:s += p - cur.pop()st.add(c)res = max(res, s + len(st) * len(st))if len(st) == k:breakreturn res
cpp
 ​
using i64 = long long;
class Solution {
public:long long findMaximumElegance(vector<vector<int>>& items, int k) {i64 res = 0, s = 0;std::sort(items.begin(), items.end(), [](auto& x, auto& y) {return x[0] > y[0];});std::vector<int> cur;std::unordered_set<int> st;for (int i = 0; i < items.size(); i ++ ) {if (i < k) {s += items[i][0];if (!st.insert(items[i][1]).second)cur.push_back(items[i][0]);}else {if (st.insert(items[i][1]).second && cur.size())s += items[i][0] - cur.back();}res = std::max(res, s + (i64)st.size() * (i64)st.size());}return res;}
};
js
 ​
/*** @param {number[][]} items* @param {number} k* @return {number}*/
var findMaximumElegance = function(items, k) {items.sort((x, y) => y[0] - x[0]);let res = 0, s = 0;let cur = [];let st = new Set();for (let i = 0; i < items.length && st.size < k; i ++ ) {if (i < k) {s += items[i][0];if (st.has(items[i][1])) cur.push(items[i][0]);else st.add(items[i][1]);}else if (cur.length && !st.has(items[i][1])) {s += items[i][0] - cur.pop();st.add(items[i][1]);}res = Math.max(res, s + st.size * st.size);}return res;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.pkl文件保存和读取

#save sim sim.save(G:/simulation.pkl) print()#read sim import pickle with open(G:/simulation.pkl, rb) as f:sim pickle.load(f)

BarTender软件下载附加详细安装教程

BarTender是美国海鸥科技推出的一款优秀的条码打印软件&#xff0c;应用于 WINDOWS95 、 98 、 NT 、 XP 、 2000 、 2003 和 3.1 版本&#xff0c; 产品支持广泛的条形码码制和条形码打印机&#xff0c; 不但支持条形码打印机而且支持激光打印机&#xff0c;还为世界知名品牌条…

C脚本实现用键盘按键控制Wincc某按钮动作

文章目录 前言一、创建Wincc画面并添加变量及按钮二、在“事件”-“键盘”下&#xff0c;编写“按下”和“释放”的C脚本 前言 在某些特定场景下&#xff0c;需要通过电脑键盘控制上位机界面上按钮按下或释放&#xff0c;本文给出了基于C脚本的解决方案。 一、创建Wincc画面并…

Python中Numpy的np.arange

np.arange 是用于创建等差整数序列的函数。其语法如下&#xff1a; np.arange(start, stop, step, dtypeNone) start&#xff1a;序列的起始值&#xff0c;默认为0。 stop&#xff1a;序列的终止值&#xff0c;生成的数组不包括此值。 step&#xff1a;序列中的值之间的步长&a…

Tailwind CSS 响应式设计实战指南

title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计&#xff0c;涵盖博客、电商网站及企业官网的布局实例&#xff0c;包括头部导航、内容区域、侧边栏、页脚…

从零开始手把手Vue3+TypeScript+ElementPlus管理后台项目实战十一(整体布局04之Header及用户注销)

新增Hearder 新增 src/layout/components/PageHeader.vue <template><div class"header-cont"><div><h1><router-link to"/">RealWorld</router-link></h1></div><div><template v-if"is…

北斗三号短报文终端户外应急通信解决方案

北斗三号短报文终端户外应急通信解决方案主要基于我国自主研发的北斗三号全球卫星导航系统&#xff08;BDS-3&#xff09;&#xff0c;为户外应急场景提供高效、稳定的通信服务。以下是对该解决方案的详细阐述&#xff1a; 一、方案概述 北斗三号短报文终端户外应急通信解决方…

MapperStruct拷贝数据的介绍和使用

1、前言 在java 编程中&#xff0c;对象直接拷贝是很常用的方法&#xff0c;最初我们常用spring提供的拷贝工具BeanUtils的copyProperties方法完成对象之间属性的拷贝。但是它有几个明显的如下缺点 1、属性类型不一致导致摸一个属性值拷贝失败 2、通一个字段使用基本类型和包…

【html5的video标签在移动端的使用】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、使用步骤1. html部分2.js部分三、video相关文章推荐 前言 在移动端的首页用视频做背景动画&#xff0c;让动画循环&#xff0c;自动播放&#xff0c;静音。…

数据结构之链表的经典笔试题

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 203. 移除链表元素 206. 反转链表 876. 链表的中间节点 面试题 02.02. 返回倒数第k个节点 …

Spring Boot整合Knife4j-3.0.3

文章目录 Spring Boot整合Knife4j-3.0.31. 引言2. 快捷的解决方案2.1 修改knife4j的依赖2.2 application.yml增加配置3.3 SwaggerConfig配置如下 Spring Boot整合Knife4j-3.0.3 1. 引言 前面我写过一篇关于整合knife4j的文档 Spring Boot整合Knife4j-2.0.7 最近我引入redissi…

【AI】文心一言的使用分享

在数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;技术的飞速发展正在改变我们的生活。文心一言&#xff0c;作为这一浪潮中的佼佼者&#xff0c;以其卓越的自然语言处理能力和广泛的应用场景&#xff0c;给我带来了前所未有的使用体验。在这篇分享中&#xff0c;我…

Spring Cloud Bus 消息总线基础入门与实践总结

【1】基础介绍 其主要是实现分布式自动刷新配置功能&#xff0c;Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架&#xff0c;它整合了Java的事件处理机制和消息中间件的功能…

ES的高可用

es最小高可用集群组成 At least three master-eligible nodes&#xff08;至少三个符合主节点条件的节点&#xff09;At least two nodes of each role&#xff08;每个角色至少有两个节点&#xff09;At least two copies of each shard (one primary and one or more replica…

Wall国内开源程序照片墙,支持VR全景及安装教程

下载 GitHub官网&#xff1a;https://github.com/zhang-tong-yao/wall 软件下载&#xff1a;https://github.com/zhang-tong-yao/wall/releases&#xff0c;推荐下载最新的版本。 演示效果 目前支持PC端和移动端自适应。 演示地址&#xff1a;https://demo-wall.ityao.cn …

在Vue 3中,el-select循环el-option的常见踩坑点,value值绑定对象类型?选中效果不准确?

在Vue 3中&#xff0c;el-select 组件是来自 Element Plus UI 库的一部分。 如果你想要设置默认选中的选项&#xff0c;你可以使用 v-model 来绑定选中的值。如果你想要在某个时刻让某个选项显示为已选中&#xff0c;可以设置对应的值到 v-model 绑定的数据。 <template>…

Android 10.0 framework层禁止扫描5g wifi功能实现

1.前言 在10.0的系统rom定制化开发中,在关于对wifi模块的开发中,由于wifi模块仅支持2.4g网络,所以需要在wifi扫描的过程中 禁止扫描5g网络,所以就需要分析扫描过程中的功能,接下来具体实现相关功能 2.framework层禁止扫描5g wifi功能实现的核心类 frameworks/opt/net/w…

TrinityCore启动报错: MySQL library version (8.0.37 id 80037) does not match

TrinityCore启动的时候报错&#xff1a; TrinityCore/src/server/database/Database/DatabaseWorkerPool.cpp:73 in DatabaseWorkerPool FATAL ERROR: Used MySQL library version (8.0.37 id 80037) does not match the version id used to compile TrinityCore (id 80036). S…

农产品商城系统农资电商商城系统java项目jsp web项目

农产品商城系统农资电商商城系统java项目jsp web项目 会员用户可以实现&#xff1a;注册登录、商品信息浏览、加入购物车、加入收藏、下单支付、查看公告、查看以及留言、个人信息管理 后台管理的实现&#xff1a;类别管理模块、商品管理模块、会员管理模块、订单管理、退货管…

你项目用到了 Dubbo,讲讲为什么要用以及怎么使用的?

引言&#xff1a;在现代分布式系统中&#xff0c;服务化架构已成为构建高性能、可扩展和可靠系统的关键。 Dubbo 作为一种优秀的服务化框架&#xff0c;提供了丰富的特性和灵活的配置选项&#xff0c;使得它在业界得到了广泛的应用和认可。本文将探讨为什么选择 Dubbo 以及如何…