最大子序列的分數

題目鏈接

最大子序列的分數

題目描述


注意點

  • 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.pswp.cn/diannao/12993.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12993.shtml
英文地址,請注明出處:http://en.pswp.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;也是未來經濟發展最具潛力…