最大子序列的分数

题目链接

最大子序列的分数

题目描述


注意点

  • n == nums1.length == nums2.length
  • 从nums1和nums2中选一个长度为k的子序列对应的下标
  • 对nums1中下标对应元素求和,乘以nums2中下标对应元素的最小值得到子序列的分数
  • 0 <= nums1[i], nums2[j] <= 100000
  • 1 <= k <= n

解答思路

  • 初始想到的是深度优先遍历,传递nums1子序列的和以及nums2中值最小的元素,当选择了k个元素时,计算分数,统计分数的最大值,但是超时
  • 参照题解,可以先将nums2从大到小进行排序,因为子序列中nums1和nums2的下标都是相同的,所以需要记录对nums2中的值进行排序后记录的是新下标newIdx
  • 使用PriorityQueue存储子序列中nums1的元素,堆顶对应的是元素的最小值。在更换子序列的元素时,按照排好序的nums2将后续的元素newIdx加入进来,同时将之前子序列中某个元素弹出(不论弹出哪个元素nums2的最小值都是nums2[newIdx]),弹出的元素应该是子序列中nums1的最小值,也就是PriorityQueue的堆顶

代码

class Solution {public long maxScore(int[] nums1, int[] nums2, int k) {int n = nums1.length;Integer[] idxArr = new Integer[n];for (int i = 0; i < n; i++) {idxArr[i] = i;}// nums2从大到小进行排序,仅记录下标位置Arrays.sort(idxArr, (x, y) -> (nums2[y] - nums2[x]));// 堆顶为最小值PriorityQueue<Integer> queue = new PriorityQueue<>((x, y) -> (x - y));long sum1 = 0;for (int i = 0; i < k; i++) {int idx = idxArr[i];sum1 += nums1[idx];queue.offer(nums1[idx]);}long res = sum1 * nums2[idxArr[k - 1]];for (int i = k; i < n; i++) {// 此时nums2[idx]是nums2中子序列的最小值// 满足上述条件且nums1中相应子序列和最大:加上idx处的元素值,减去前面子序列中的最小元素int idx = idxArr[i];// nums2[idx]也比之前的子序列小,sum1也比之前的子序列小,分数一定更小,不考虑if (nums1[idx] < queue.peek()) {continue;}sum1 -= queue.poll();sum1 += nums1[idx];queue.offer(nums1[idx]);res = Math.max(res, sum1 * nums2[idx]);}return res;}
}

关键点

  • 将nums2中的元素从大到小进行排序,初始选择k个元素,对应nums2最小值就是nums2[k - 1],按顺序加入元素,弹出之前某个元素,保证快速找到子序列中nums2的最小值
  • 根据nums2选择好子序列后,根据其下标将nums1中对应元素添加到PriorityQueue中(堆顶为最小值),保证快速找到nums2[newIdx]是最小值时nums1的元素和最大的子序列
  • 如果加入新的元素下标对应在nums1中的元素值比PriorityQueue堆顶元素更小,说明此时分数一定比上一个子序列分数更低(nums1子序列之和更小,nums2子序列中的最小值也更小),不考虑

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

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

相关文章

Leecode热题100---560:和为k的子数组个数

题目&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 C&#xff1a; #include<iostream> #include<vector> using namespace std; class Solution { public:…

AI作画算法详解:原理、应用与未来发展

随着人工智能技术的不断发展&#xff0c;AI作画逐渐成为了一个热门话题。AI作画&#xff0c;即利用人工智能算法生成绘画作品&#xff0c;不仅仅是技术的展示&#xff0c;更是艺术与科技结合的创新体现。本文将深入探讨AI作画的核心算法原理&#xff0c;并通过实例帮助读者更好…

多步预测系列 | LSTM、CNN、Transformer、TCN、串行、并行模型集合

● 环境框架&#xff1a;python 3.9 pytorch 1.8 及其以上版本均可运行 ● 使用对象&#xff1a;论文需求、毕业设计需求者 ● 代码保证&#xff1a;代码注释详细、即拿即可跑通。 往期精彩内容&#xff1a; 时序预测&#xff1a;LSTM、ARIMA、Holt-Winters、SARIMA模型的分…

数据结构篇3—《龙门客“栈”》

文章目录 &#x1f6a9;前言1、栈的概念2、栈的实现框架3、栈的代码实现3.1、栈的初始化和销毁3.2、入栈\出栈\返回栈顶元素\元素个数\判空3.3、栈定义注意事项 4、栈的应用实例——《括号匹配问题》 &#x1f6a9;前言 前面记录了关于顺序表和链表的数据结构&#xff0c;这一篇…

【CF1965A】Everything Nim

题目链接 前置trick&#xff1a; 使用vector去重&#xff1a; vector<int> a(n);for(int i0;i<n;i) cin>>a[i];sort(a.begin(),a.end());a.erase(unique(a.begin(),a.end()),a.end());na.size();题意&#xff1a; 有 n n n堆石子&#xff0c;第 i i i堆有 a i a…

【企业宣传片】拍摄思维提升,专业影视质感核心揭密,一课搞定

课程下载&#xff1a;【企业宣传片】拍摄-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程介绍 大量案例分析宣传片拍摄的痛点要点 根据案例告诉你解决方案&#xff0c;讲透概念 改变你对企业宣传片的思维层级与认知 归纳总结对比不同案…

C++语法|类直接包含与自身类型相同的成员变量?

在C中&#xff0c;一个类不能直接包含与自身类型相同的成员变量。这是因为类的大小需要在编译时确定&#xff0c;而一个包含自身类型的成员变量会导致递归定义&#xff0c;从而无法确定类的大小。 文章目录 示例代码&#xff08;非法定义&#xff09;解决办法1.使用指针2.使用智…

k8s 二进制安装 优化架构之 部署负载均衡,加入master02

目录 一 实验环境 二 部署 CoreDNS 1&#xff0c;所有node加载coredns.tar 镜像 2&#xff0c;在 master01 节点部署 CoreDNS 3&#xff0c; DNS 解析测试 4&#xff0c; 报错分析 5&#xff0c;重新 DNS 解析测试 三 master02 节点部署 1&#xff0…

AI学习指南数学工具篇-PCA的应用场景

AI学习指南数学工具篇-PCA的应用场景 在人工智能领域&#xff0c;数据处理是非常重要的一环。对于大量高维数据&#xff0c;我们往往需要进行数据降维来减少计算复杂度&#xff0c;同时利用可视化工具对数据进行分析和理解。主成分分析&#xff08;Principal Component Analys…

C++ 利用标准库多字节转宽字节字符

在 C/C 之中&#xff0c;通常建议使用&#xff1a;mbstowcs &#xff08;C语言函数库&#xff09;来实现多字节字符转宽字节字符&#xff0c;这是因为如果使用。 std::wstring_convert<std::codecvt_utf8<wchar_t>> 模板来实现&#xff0c;它可能导致程序崩溃的风险…

【利用数组处理批量数据-谭浩强配套】(适合专升本、考研)

无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 无偿分享学习资料&#xff0c;需要的小伙伴评论区或私信dd。。。 完整资料如下&#xff1a;纯干货、纯干货、纯干货&#xff01;&#xff01;…

点云成图原理

点成图&#xff08;Point Cloud&#xff09;是指由一组离散的点构成的图形&#xff0c;它们在空间中没有任何连接关系。点成图通常是由激光雷达、相机或其他传感器获取的三维数据&#xff0c;用于表示现实世界中的物体或场景。 三角成图&#xff08;Triangulation&#xff09;…

element ui Tree树形控件

lazy 是否懒加载子节点&#xff0c;需与 load 方法结合使用 boolean 默认为falseload 加载子树数据的方法&#xff0c;仅当 lazy 属性为true 时生效 function(node, resolve)使用懒加载load不需要再使用data&#xff0c;利用resolve返回值即可注意&#xff1a;第一层的数据要写…

PMR-440N7Q韩国施耐德三和相序继电器EOCR-PMR

韩国施耐德三和EOCR继电器PMR-440N7Q PMR-440-N 直流电动机保护器:DCL、DOCR-S/H 欠电流继电器:EUCR-3C 交流电压继电器:EOVR、EVR-PD、EVR-FD、EUVR 韩国三和EOCR电动机保护器:EOCR-SS、EOCR-SS1/SS2、EOCR-AR、EOCR-ST、EOCR-SP、EOCR-SP1/SP2、EOCR-SE、EOCR-SE2/SE PMR-44…

GIT基础02 多机器协作等命令

前言 首先我们知道git给我们提供了分支管理的功能 我们一般使用master分支作为线上环境,master分支一般是一个稳定的分支 我们通常是会创建一个其他分支进行开发,这样不会影响线上的机器运行 如果没有git提供这样的分支功能,就无法做到这一套了 指令学习 假设软件出现问题咋办…

LBSS138LT1G 丝印J1 SOT-23 N沟道 50V/200mA 贴片MOSFET

LBSS138LT1G的应用领域广泛&#xff0c;主要因为它是一种N沟道金属氧化物半导体场效应晶体管&#xff08;MOSFET&#xff09;&#xff0c;具有低电荷、快速开关速度和高阻断特性。以下是一些典型的应用领域&#xff1a; 1. 消费电子产品&#xff1a;LBSS138LT1G常用于电视、音响…

debian apt 更改阿里源

1. 备份文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 2. 更改 sources.list文件内容为&#xff1a; deb http://mirrors.aliyun.com/debian/ buster main non-free contrib deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib deb htt…

QT状态机1-三态循环状态机

#include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)

【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类

标题&#xff1a;【C -&#xff1e; Cpp】由C迈向Cpp &#xff08;6&#xff09;&#xff1a;静态、友元和内部类 水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 &#xff08;一&#xff09;静态成员 &#xff08;二&#xff09;友元 &#xff08;三&#xff09…

生产性服务业与生活性服务业如何区分

服务业的兴旺发达是现代经济的显著特征&#xff0c;是经济社会发展的必然趋势&#xff0c;是衡量经济发展现代化、国际化、高端化的重要标志。生产性服务业和生活性服务业是服务业的重要组成部分&#xff0c;是当前中国经济最具活力的产业&#xff0c;也是未来经济发展最具潜力…