LeetCode 2968.執行操作使頻率分數最大

給你一個下標從 0 開始的整數數組 nums 和一個整數 k 。

你可以對數組執行 至多 k 次操作:

從數組中選擇一個下標 i ,將 nums[i] 增加 或者 減少 1 。
最終數組的頻率分數定義為數組中眾數的 頻率 。

請你返回你可以得到的 最大 頻率分數。

眾數指的是數組中出現次數最多的數。一個元素的頻率指的是數組中這個元素的出現次數。

示例 1:

輸入:nums = [1,2,6,4], k = 3
輸出:3
解釋:我們可以對數組執行以下操作:

  • 選擇 i = 0 ,將 nums[0] 增加 1 。得到數組 [2,2,6,4] 。
  • 選擇 i = 3 ,將 nums[3] 減少 1 ,得到數組 [2,2,6,3] 。
  • 選擇 i = 3 ,將 nums[3] 減少 1 ,得到數組 [2,2,6,2] 。
    元素 2 是最終數組中的眾數,出現了 3 次,所以頻率分數為 3 。
    3 是所有可行方案里的最大頻率分數。
    示例 2:

輸入:nums = [1,4,4,2,4], k = 0
輸出:3
解釋:我們無法執行任何操作,所以得到的頻率分數是原數組中眾數的頻率 3 。

提示:

1 <= nums.length <= 10^5
1 <= nums[i] <= 10^9
0 <= k <= 10^14

法一:對于一個子數組,要使操作次數最小,最優解是所有數字都變成中位數,因此我們可以先對數組進行排序,然后用滑窗來解,對于一個子數組的操作次數,可以用前綴和來解決,如下圖:
在這里插入圖片描述
將子數組里所有數字都變為q,所需的操作次數就是藍色和綠色部分的面積,藍色部分的面積可以用矩形面積減去前三個數字的前綴和得到,綠色部分的面積可以用后三個數字的前綴和減去下面的矩形得到。

class Solution {
public:int maxFrequencyScore(vector<int>& nums, long long k) {sort(nums.begin(), nums.end());vector<long long> s(nums.size() + 1);for (int i = 0; i < nums.size(); ++i) {s[i + 1] = s[i] + nums[i];}auto getDistance = [&](int l, int i, int r) -> long long {long long left = (long long)nums[i] * (i - l) - (s[i] - s[l]);long long right = s[r + 1] - s[i + 1] - (long long)nums[i] * (r - i);return left + right;};int left = 0;int ans = 0;for (int i = 0; i < nums.size(); ++i) {while (getDistance(left, (i + left) / 2, i) > k) {++left;}ans = max(ans, i - left + 1);}return ans;}
};

如果nums的長度為n,則此算法時間復雜度為O(nlogn),空間復雜度為O(n)。

法二:先對nums進行排序,然后滑窗,考慮一個子數組,如果子數組現在有3個元素a0、a1、a2,此時最優解是將a0和a2變為a1,操作次數s3為(a2 - a1) + (a1 - a0) = a2 - a0,此時滑窗的右端點向右移動了,那么此時子數組包含4個元素a0、a1、a2、a3,此時最優解是將所有元素變為a1,操作次數s4為(a1 - a0) + (a2 - a1) + (a3 - a1) = a2 + a3 - a0 - a1,同理,如果有五個元素,則操作次數s5為(a2 - a0) + (a2 - a1) + (a3 - a2) + (a4 - a2) = a3 + a4 - a0 - a1,可見,每個子數組的最優操作次數都是中位數右邊的所有數減去中位數左邊的所有數。因此,當新加進來一個數時,它對操作次數的貢獻總是它自己的值,并且當一個數加入時,中位數會變為負數,可以用s5減去s4的值,即a4 - a2來表示,這是加入新值后總元素數為奇數的情況,為偶數時同理,用s4減去s3可得a3 - a1,即新加入一個下標為i的數字對操作次數的貢獻為nums[i] - nums[(i + left)/2。當左邊的數字出滑窗時,左邊的數字對總操作次數的貢獻為nums[left],因為它原本對操作次數的貢獻為負,出滑窗時要加上它,并且中位數由正變為負,即總貢獻為nums[left] - nums[(i + left) / 2]

class Solution {
public:int maxFrequencyScore(vector<int>& nums, long long k) {sort(nums.begin(), nums.end());int left = 0;int ans = 0;long long cur = 0;for (int i = 0; i < nums.size(); ++i) {cur += nums[i] - nums[(i + left) / 2];while (cur > k) {cur += nums[left] - nums[(i + left + 1) / 2];++left;}ans = max(ans, i - left + 1);}return ans;}
};

如果nums的長度為n,則此算法時間復雜度為O(nlogn),空間復雜度為O(1)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900640.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

excel經驗

Q:我現在有一個excel&#xff0c;有一列數據&#xff0c;大概兩千多行。如何在這一列中 篩選出具有關鍵字的內容&#xff0c;并輸出到另外一列中。 A: 假設數據在A列&#xff08;A1開始&#xff09;&#xff0c;關鍵字為“ABC”在相鄰空白列&#xff08;如B1&#xff09;輸入公…

HTTP查詢參數示例(XMLHttpRequest查詢參數)(帶查詢參數的HTTP接口示例——以python flask接口為例)flask查詢接口

文章目錄 HTTP查詢參數請求示例接口文檔——獲取城市列表代碼示例效果 帶查詢參數的HTTP接口示例——以python flask接口為例app.pyREADME.md運行應用API示例客戶端示例關鍵實現說明&#xff1a;運行方法&#xff1a; HTTP查詢參數請求示例 接口文檔——獲取城市列表 代碼示例…

將飛帆制作的網頁作為 div 集成到自己的網頁中

并且自己的網頁可以和飛帆中的控件相互調用函數。效果&#xff1a; 上鏈接 將飛帆制作的網頁作為 div 集成到自己的網頁中 - 文貝 進入可以復制、運行代碼

Redis主從復制:告別單身Redis!

目錄 一、 為什么需要主從復制&#xff1f;&#x1f914;二、 如何搭建主從架構&#xff1f;前提條件?步驟&#x1f4c1; 創建工作目錄&#x1f4dc; 創建 Docker Compose 配置文件&#x1f680; 啟動所有 Redis&#x1f50d; 驗證主從狀態 &#x1f4a1; 重要提示和后續改進 …

k8s 1.30.6版本部署(使用canal插件)

#系統環境準備 參考 https://blog.csdn.net/dingzy1/article/details/147062698?spm1001.2014.3001.5501 #配置下載源 curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/Release.key |gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyri…

機器學習的一百個概念(7)獨熱編碼

前言 本文隸屬于專欄《機器學習的一百個概念》&#xff0c;該專欄為筆者原創&#xff0c;引用請注明來源&#xff0c;不足和錯誤之處請在評論區幫忙指出&#xff0c;謝謝&#xff01; 本專欄目錄結構和參考文獻請見[《機器學習的一百個概念》 ima 知識庫 知識庫廣場搜索&…

RHCSA復習

在Linux中&#xff0c; wrx 分別代表寫&#xff08;write&#xff09;、讀&#xff08;read&#xff09;和執行&#xff08;execute&#xff09;權限&#xff0c;它們對應的權限值分別是&#xff1a; - r &#xff08;讀權限&#xff09;&#xff1a;權限值為4。 - w &am…

“樂企“平臺如何重構業財稅票全流程生態?

2025年&#xff0c;國家稅務總局持續推進的"便民辦稅春風行動"再次推進數字化服務升級&#xff0c;其中"樂企"平臺作為稅務信息化的重要載體&#xff0c;持續優化數電票服務能力&#xff0c;為企業提供更高效、更規范的稅務管理支持。在這一背景下&#xf…

Android audio(6)-audiopolicyservice介紹

AudioPolicyService 是策略的制定者&#xff0c;比如某種 Stream 類型不同設備的音量&#xff08;index/DB&#xff09;是多少、某種 Stream 類型的音頻數據流對應什么設備等等。而 AudioFlinger 則是策略的執行者&#xff0c;例如具體如何與音頻設備通信&#xff0c;維護現有系…

Boost庫搜索引擎項目(版本1)

Boost庫搜索引擎 項目開源地址 Github&#xff1a;https://github.com/H0308/BoostSearchingEngine Gitee&#xff1a;https://gitee.com/EPSDA/BoostSearchingEngine 版本聲明 當前為最初版本&#xff0c;后續會根據其他內容對當前項目進行修改&#xff0c;具體見后續版本…

git分支合并信息查看

TortoiseGit工具 1、選擇"Revision graph" 2、勾選view中的 Show branchings and merges Arrows point towards merges 3、圖案說明 紅色部分?&#xff1a;代表當前分支 橙色部分?&#xff1a;代表遠程分支 黃色部分?&#xff1a;代表一個tag 綠色部分?&#xf…

Java學習筆記(多線程):ReentrantLock 源碼分析

本文是自己的學習筆記&#xff0c;主要參考資料如下 JavaSE文檔 1、AQS 概述1.1、鎖的原理1.2、任務隊列1.2.1、結點的狀態變化 1.3、加鎖和解鎖的簡單流程 2、ReentrantLock2.1、加鎖源碼分析2.1.1、tryAcquire()的具體實現2.1.2、acquirQueued()的具體實現2.1.3、tryLock的具…

在C++11及后續標準中,auto和decltype是用于類型推導的關鍵特性,它們的作用和用法。

在C11及后續標準中&#xff0c;auto和decltype是用于類型推導的關鍵特性&#xff0c;它們的作用和用法有所不同。以下是詳細說明&#xff1a; 1. auto 關鍵字 基本作用 自動推導變量的類型&#xff08;根據初始化表達式&#xff09;主要用于簡化代碼&#xff0c;避免顯式書寫…

Linux:進程程序替換execl

目錄 引言 1.單進程版程序替換 2.程序替換原理 3.6種替換函數介紹 3.1 函數返回值 3.2 命名理解 3.3 環境變量參數 引言 用fork創建子進程后執行的是和父進程相同的程序(但有可能執行不同的代碼分支)&#xff0c;我們所創建的所有的子進程&#xff0c;執行的代碼&#x…

LeetCode.02.04.分割鏈表

分割鏈表 給你一個鏈表的頭節點 head 和一個特定值 x &#xff0c;請你對鏈表進行分隔&#xff0c;使得所有 小于 x 的節點都出現在 大于或等于 x 的節點之前。 你不需要 保留 每個分區中各節點的初始相對位置。 示例 1&#xff1a; 輸入&#xff1a;head [1,4,3,2,5,2], x …

Johnson算法 流水線問題 java實現

某印刷廠有 6項加工任務J1&#xff0c;J2&#xff0c;J3&#xff0c;J4&#xff0c;J5&#xff0c;J6&#xff0c;需要在兩臺機器Mi和M2上完 成。 在機器Mi上各任務所需時間為5,1,8,5,3,4單位; 在機器M2上各任務所需時間為7,2,2,4,7,4單位。 即時間矩陣為&#xff1a; T1 {5, …

按鍵++,--在操作uint8_t類型(一個取值為1~10的數)中,在LCD中顯示兩位數字問題

問題概況 在執行按鍵&#xff0c;--過程中&#xff0c;本來數值為1~10.但是在執行過程中&#xff0c;發現數值在經過10數值后&#xff0c;后面的“0”會一直在LCD顯示屏中顯示。 就是執行操作中&#xff0c;從1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5&#xf…

【QT】QTreeWidgetItem的checkState/setCheckState函數和isSelected/setSelected函數

目錄 1、函數原型1.1 checkState/setCheckState1.2 isSelected/setSelected2、功能用途3、示例QTreeWidget的checkState/setCheckState函數和isSelected/setSelected這兩組函數有著不同的用途,下面具體說明: 1、函數原型 1.1 checkState/setCheckState Qt::CheckState QTr…

005 vue項目結構 vue請求頁面執行流程(vue2)

文章目錄 vue項目結構vue請求頁面執行流程main.jsrouterHelloWorld.vueApp.vueindex.html vue項目結構 config目錄存放的是配置文件&#xff0c;比如index.js可以配置端口 node_modules存放的是該項目依賴的模塊&#xff0c;這些依賴的模塊在package.json中指定 src目錄分析 1…

匯豐xxx

1. Spring Boot 的了解&#xff0c;解決什么問題&#xff1f; 我的理解&#xff1a; Spring Boot 是一個基于 Spring 框架的快速開發腳手架&#xff0c;它簡化了 Spring 應用的初始搭建和開發過程。解決的問題&#xff1a; 簡化配置&#xff1a; 傳統的 Spring 應用需要大量的…