【数据结构-差分】力扣1589. 所有排列中的最大和

有一个整数数组 nums ,和一个查询数组 requests ,其中 requests[i] = [starti, endi] 。第 i 个查询求 nums[starti] + nums[starti + 1] + … + nums[endi - 1] + nums[endi] 的结果 ,starti 和 endi 数组索引都是 从 0 开始 的。

你可以任意排列 nums 中的数字,请你返回所有查询结果之和的最大值。

由于答案可能会很大,请你将它对 109 + 7 取余 后返回。

示例 1:
输入:nums = [1,2,3,4,5], requests = [[1,3],[0,1]]
输出:19
解释:一个可行的 nums 排列为 [2,1,3,4,5],并有如下结果:
requests[0] -> nums[1] + nums[2] + nums[3] = 1 + 3 + 4 = 8
requests[1] -> nums[0] + nums[1] = 2 + 1 = 3
总和为:8 + 3 = 11。
一个总和更大的排列为 [3,5,4,2,1],并有如下结果:
requests[0] -> nums[1] + nums[2] + nums[3] = 5 + 4 + 2 = 11
requests[1] -> nums[0] + nums[1] = 3 + 5 = 8
总和为: 11 + 8 = 19,这个方案是所有排列中查询之和最大的结果。

示例 2:
输入:nums = [1,2,3,4,5,6], requests = [[0,1]]
输出:11
解释:一个总和最大的排列为 [6,5,4,3,2,1] ,查询和为 [11]。

示例 3:
输入:nums = [1,2,3,4,5,10], requests = [[0,2],[1,3],[1,1]]
输出:47
解释:一个和最大的排列为 [4,10,5,3,2,1] ,查询结果分别为 [19,18,10]。

在这里插入图片描述

差分

class Solution {
public:int maxSumRangeQuery(vector<int>& nums, vector<vector<int>>& requests) {int MOD = 1e9 + 7;int n = nums.size();vector<int> diff(n+1);for(auto &request: requests){diff[request[0]]++;diff[request[1]+1]--;}int s = 0;for(int i = 1; i < n; i++){diff[i] += diff[i-1];}std::sort(diff.begin(), diff.end(), greater<int>());std::sort(nums.begin(), nums.end(), greater<int>());long long res = 0;for(int i = 0; i < n; i++){res += (long long)nums[i] * diff[i];}return res % MOD;}
};

这道题目,首先我们可以想到记录request区间覆盖最多次的位置是哪个,然后覆盖最多次的位置,就将nums最大的值和他相乘,然后尽量保证覆盖多次的位置可以乘以较大的值,这样最后结果的和才会最大。

我们可以考虑使用差分数组来记录每个位置被覆盖的次数的差分数组,然后diff[i] += diff[i-1];这个代码,遍历diff,这时候diff的含义就从差分数组变成了记录每个位置覆盖的次数。由于我们需要找到被覆盖最多的次数,然后将次数乘以最大的值,被覆盖第二多的次数乘以第二大的值,所以我们将diff和nums都进行降序排序。最后将nums[i]*diff[i]相乘,记录到res中,最后返回的res就是最大的结果

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

迁移学习+多模态融合,小白轻松发一区!创新性拉满!

多模态研究如今愈发火热&#xff0c;已成为各大顶级会议的投稿热门。今天&#xff0c;我为大家提供一个多模态的创新思路&#xff1a;迁移学习与多模态融合。 迁移学习多模态融合方向的优势 1.提升模型性能&#xff1a;综合更多维度优势&#xff0c;跨模态互补 2.快速适应新…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL17

用3-8译码器实现全减器 描述 请使用3-8译码器和必要的逻辑门实现全减器&#xff0c;全减器接口图如下&#xff0c;A是被减数&#xff0c;B是减数&#xff0c;Ci是来自低位的借位&#xff0c;D是差&#xff0c;Co是向高位的借位。 3-8译码器代码如下&#xff0c;可将参考代码添…

基于Java的房地产在线营销管理系统研究与实现

目录 前言 功能设计 系统实现 获取源码 博主主页&#xff1a;百成Java 往期系列&#xff1a;Spring Boot、SSM、JavaWeb、python、小程序 前言 随着信息技术的迅猛发展&#xff0c;互联网已经渗透到我们生活的方方面面&#xff0c;为各行各业带来了前所未有的变革。房地产…

Fiddler的下载(带安装包和安装配置教程)

1.安装包下载 1.1官网下载 https://www.telerik.com/download/fiddler 填上相应的信息即可 1.2安装包下载 安装包地址 提取码&#xff1a;uq2n 2.安装 选择路径 3.使用 3.1配置支持抓https的包 配置成功!!&#xff01;如果还是抓不到 重启一下&#xff01; 3.2抓包 双…

Flux【真人模型】:高p高糊反向真实质感!网图风格的Lora模型,超逼真的AI美女大模型!

大家好&#xff0c;我是画画的小强 今天和大家分享一款基于Flux训练的网图风格的lora模型&#xff1a;墨幽-F.1-Lora-网图&#xff0c;该Lora模型由墨幽团队出品&#xff0c;旨在生成高p高糊的反向真实质感图片&#xff0c;而非真实摄影图片。不过&#xff0c;在自己出图过程中…

车间生产电子看板系统在工厂中的高效运用

在当今竞争激烈的制造业领域&#xff0c;工厂不断寻求提高生产效率、优化管理流程的方法。车间生产电子看板系统的出现&#xff0c;为工厂带来了全新的管理模式和高效的生产方式。 车间生产电子看板系统通过数字化的显示方式&#xff0c;将生产进度、任务安排、质量状况、设备运…

已知曲线满足正余弦函数,根据其峰值,还原出整条曲线

&#x1f3c6;本文收录于《全栈Bug调优(实战版)》专栏&#xff0c;主要记录项目实战过程中所遇到的Bug或因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&am…

C++和OpenGL实现3D游戏编程【连载9】——纹理的镂空显示

1、本节实现的内容 前面的课程中,我们学会了加载纹理并显示纹理图案,但是纹理的图案都是长方形的图片,图片就会有白色或黑色背景,那么在游戏设计过程中,我们经常不需要显示图片的背景部分,那么这节课我们就来讨论一下如何实现剔除白色或黑色背景后的镂空图像,下图就是将…

百元头戴式耳机都有哪些?五大精品独家推荐!

在当今市场中&#xff0c;耳机已经成为我们生活中不可或缺的电子设备之一。而对于追求性价比的朋友来说&#xff0c;如何在百元价位内挑选到一款音质出色、舒适耐用的头戴式耳机&#xff0c;无疑是一大难题。百元头戴式耳机都有哪些&#xff1f;为了帮助大家在琳琅满目的产品中…

图结构的稀疏变换器:EXPHORMER框架

人工智能咨询培训老师叶梓 转载标明出处 尽管图变换器在理论上具有强大的表达能力&#xff0c;但是它们在扩展到大型图时面临着巨大的挑战。这一挑战主要源于其全局注意力机制的二次方时间复杂度&#xff0c;这不仅限制了其在大型图数据集上的应用&#xff0c;也使得其在内存和…

Docker 里面按照ifconfig

1. 进入Docker 容器内部 docker exec -it xxx bash2. 安装 net-tools iputils-ping apt-get update && apt-get install -y net-tools apt-get update && apt-get install -y iputils-ping 3. 执行ifconfig 执行ping

Nacos注册中心(Nacos安装,快速入门,多级存储,负载均衡,环境隔离,配置管理,热更新,集群搭建,nginx反向代理)

Nacos注册中心 1. Nacos安装 (windows) 1.1 官网下载 网址:https://github.com/alibaba/nacos/releases/tag/1.4.1 这里下载nacos1.4.1的Windows版本为例1.2 解压到本地 注: 解压到非中文目录 nacos默认端口号:8848,可在配置文件properties中修改1.3 启动nacos 在G:\Sp…

鸿蒙OpenHarmony【轻量系统内核通信机制(互斥锁)】子系统开发

互斥锁 基本概念 互斥锁又称互斥型信号量&#xff0c;是一种特殊的二值性信号量&#xff0c;用于实现对共享资源的独占式处理。 任意时刻互斥锁的状态只有两种&#xff0c;开锁或闭锁。当任务持有互斥锁时&#xff0c;该互斥锁处于闭锁状态&#xff0c;这个任务获得该互斥锁…

了解CRM销售自动化:类型、优势、策略和工具

对于疲于手动追踪潜在客户和管理客户关系的销售人员而言&#xff0c;销售自动化提供了一种有效的解决方案&#xff0c;它能够简化这些繁琐的任务&#xff0c;从而使销售团队能够专注于其核心优势——销售本身。 销售自动化是什么&#xff1f; 销售自动化是指运用软件工具自动…

高德地图JS API AMap.MouseTool绘制

fang &#x1f916; 作者简介&#xff1a;水煮白菜王 &#xff0c;一位资深前端劝退师 &#x1f47b; &#x1f440; 文章专栏&#xff1a; 高德AMap专栏 &#xff0c;记录一下平时在博客写作中&#xff0c;总结出的一些开发技巧✍。 感谢支持&#x1f495;&#x1f495;&#…

TPDO触发条件如何满足?

在上一期中&#xff0c;我们了解到TPDO&#xff08;传输过程数据对象&#xff09;的传输类型有很多种&#xff1a;同步周期性传输、RTR&#xff08;远程传输请求&#xff09;以及异步制造商特定事件等。这些类型的触发条件主要分为三种&#xff1a;同步&#xff08;SYNC&#x…

Java 多态(难)

1. 即同一方法可以根据发送对象的不同而采用多种不同的行为方式。 2&#xff0e;一个对象的实际类型是确定的&#xff0c;但可以指向对象的引用的类型有很多。 举例说明&#xff1a;新建两个类&#xff0c;Person类和Student类&#xff0c;Student类继承Person类&#xff1a…

Xinstall助力App推广,下载自动绑定提升转化率

在App推广和运营的过程中&#xff0c;我们经常会遇到一些痛点。比如&#xff0c;用户下载App后需要手动进行一系列繁琐的操作才能完成注册和绑定&#xff0c;这不仅影响了用户体验&#xff0c;还降低了转化率。那么&#xff0c;有没有一种方法能够简化这个过程&#xff0c;提升…

VsCode汉化教程(新手教程)

刚用VsCode的可能不知道怎么汉化&#xff0c;这里出个给新手的教程。 一.下载汉化插件 1.点击左侧边栏中的扩展 2.下载简体中文汉化插件&#xff08;搜索chinese就行&#xff09; 二.切换语言 很多人认为下完成就汉化成功了&#xff0c;实际上需要自己切换&#xff0c;这个插…

苹果撤诉NSO,竟因惧怕情报泄露?!VMware vCenter惊现高危漏洞!20万台设备遭感染!新型物联网僵尸网络肆虐全球! | 安全周报0920

新闻1&#xff1a;苹果撤诉NSO&#xff0c;竟因惧怕情报泄露&#xff1f;&#xff01; 苹果公司已提交动议&#xff0c;“自愿”撤销对商业间谍软件供应商NSO集团的诉讼&#xff0c;理由是风险形势的转变可能导致关键“威胁情报”信息的暴露。 这一进展最初由《华盛顿邮报》于…