力扣 第 463 場周賽

1.?按策略買賣股票的最佳時機

給你兩個整數數組 prices 和 strategy,其中:

prices[i] 表示第 i 天某股票的價格。
strategy[i] 表示第 i 天的交易策略,其中:
-1 表示買入一單位股票。
0 表示持有股票。
1 表示賣出一單位股票。
同時給你一個 偶數 整數 k,你可以對 strategy 進行 最多一次 修改。一次修改包括:

選擇 strategy 中恰好 k 個 連續 元素。
將前 k / 2 個元素設為 0(持有)。
將后 k / 2 個元素設為 1(賣出)。
利潤 定義為所有天數中 strategy[i] * prices[i] 的 總和 。

返回你可以獲得的 最大 可能利潤。

注意: 沒有預算或股票持有數量的限制,因此所有買入和賣出操作均可行,無需考慮過去的操作。

解題思路:容易想到滑窗的思路, 通過計算增量, 結果就是原來的乘積+增量, 先計算第一個窗口, 對于數組strategy, 前k/2個數變成0, 增量為-strategy[I]*prices[i],? 后k/2變成1, 增量為prices[i]*1-strategy[I]*prices[i], 向右滑動的過程中, 下標為i-k/2的數會從1變成0, 若變化后增量全是負值, 此時保持原值更優, 也就是增量和0取最大值

using ll = long long;
class Solution {
public:long long maxProfit(vector<int>& prices, vector<int>& strategy, int k) {ll tot = 0, sum = 0;for (int i = 0; i < k / 2; i++) {int p = prices[i], s = strategy[i];tot += p * s;sum -= p * s;}for (int i = k / 2; i < k; i++) {int p = prices[i], s = strategy[i];tot += p * s;sum += p * (1 - s);}ll max_sum = max(sum, 0LL);for (int i = k; i < prices.size(); i++) {int p = prices[i], s = strategy[i];tot += p * s;sum += p * (1 - s) - prices[i - k / 2] +prices[i - k] * strategy[i - k];max_sum = max(max_sum, sum);}return max_sum + tot;}
};
// [i,i+k/2-1]/[i-k,i-k/2-1] - 前k/2
// [i-k/2,i-1]

?2.?區間乘法查詢后的異或 I

給你一個長度為 n 的整數數組 nums 和一個大小為 q 的二維整數數組 queries,其中 queries[i] = [li, ri, ki, vi]。

對于每個查詢,按以下步驟執行操作:

設定 idx = li。
當 idx <= ri 時:
更新:nums[idx] = (nums[idx] * vi) % (109 + 7)
將 idx += ki。
在處理完所有查詢后,返回數組 nums 中所有元素的 按位異或 結果。

解題思路:

0 <= li <= ri < n
1 <= q == queries.length <= 10^3

n*q的時間復雜度, 直接按題意模擬即可

const int MOD = 1e9 + 7;
using ll = long long;
class Solution {
public:int xorAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {vector<ll> nums_;for (int i = 0; i < nums.size(); i++)nums_.push_back(nums[i]);for (int i = 0; i < queries.size(); i++) {int x = queries[i][0], y = queries[i][1], z = queries[i][2],e = queries[i][3];for (int j = x; j <= y; j += z) {nums_[j] = (nums_[j] * e) % MOD;}}ll ans = 0;for (int i = 0; i < nums_.size(); i++) {ans = ans ^ nums_[i];}return ans;}
};

3.?刪除可整除和后的最小數組和

給你一個整數數組 nums 和一個整數 k。

你可以 多次 選擇 連續 子數組 nums,其元素和可以被 k 整除,并將其刪除;每次刪除后,剩余元素會填補空缺。
返回在執行任意次數此類刪除操作后,nums 的最小可能 和。

解題思路:DP,每次刪除的元素和都是k的倍數, 對于數組的最后一個元素nums[n-1], 刪除的話, 尋找當前待刪子數組的左端點i, 下標i...n-1是k的倍數,?刪除子數組 [i,n?1] 后,問題變成前綴 [0,i?1] 的最小和, 可能有多個滿足條件的左端點i, 題中求刪除后nums的最小可能和, 因此刪除和最大的子數組和, 保留剩下最小的數組和。狀態轉移時, 不刪就是f+x, 刪的話, 變為剩余前綴的最小值

using ll = long long;
class Solution {
public:long long minArraySum(vector<int>& nums, int k) {vector<ll> a(k, LLONG_MAX);a[0] = 0;ll f = 0;int s = 0;for (int i = 0; i < nums.size(); i++) {s = (s + nums[i]) % k;f = min(f + nums[i], a[s]);a[s] = f;}return f;}
};

4.?區間乘法查詢后的異或 II

給你一個長度為 n 的整數數組 nums 和一個大小為 q 的二維整數數組 queries,其中 queries[i] = [li, ri, ki, vi]。
對于每個查詢,需要按以下步驟依次執行操作:

設定 idx = li。
當 idx <= ri 時:
更新:nums[idx] = (nums[idx] * vi) % (109 + 7)。
將 idx += ki。
在處理完所有查詢后,返回數組 nums 中所有元素的 按位異或 結果。

解題思路:大數據范圍 - 不會寫 - 轉載佬的

如果?ki?>n?,我們直接暴力計算,因為下標每次增加?n?,最多加?n??次就到?n?了。維護這種操作的復雜度是?O(qn?)。

如果?ki?≤n?,注意到本次操作被修改的下標?modki??都和?li?modki??相等,又因為只要求最后的答案,所以我們可以把這個信息先分類記下來:步長為?ki?,且下標?modki??為特定值,且位于區間?[li?,ri?]?里的所有下標都要乘以?vi?。步長只有?n??種,每種步長的?mod?也只有?n??種,因此我們只有?O(n)?類信息要記錄。

怎么把我們記錄的信息還原成答案呢?我們枚舉每類信息,這樣問題變為:每次給一個區間乘以?vi?,問每個數最后的值。這就是?leetcode 1109. 航班預定統計,對操作區間排序,使用差分 + 掃描線的思想即可離線處理。1109 題里,加法的逆運算是減法,本題里模意義下乘法的逆運算是求逆元。

還原答案的復雜度是多少呢?注意到相同步長不同余數的下標是不會重復的,因此每種步長會恰好把所有下標枚舉一遍,因此我們會枚舉?O(nn?)?次下標,再加上對操作的排序,因此復雜度為?O(qlogq+nn?)。

最后考慮求逆元的復雜度,整體復雜度為?O(q(logq+logM)+nn?),其中?M=109+7?是模數。

class Solution {
public:int xorAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {int n = nums.size(), B = sqrt(n);// 求乘法逆元const int MOD = 1e9 + 7;auto inv = [&](long long a) {long long b = MOD - 2, y = 1;for (; b; b >>= 1) {if (b & 1) y = (y * a) % MOD;a = a * a % MOD;}return y;};long long A[n];for (int i = 0; i < n; i++) A[i] = nums[i];typedef pair<int, long long> pil;vector<pil> vec[B + 1][B + 1];for (auto &qry : queries) {int l = qry[0], r = qry[1], K = qry[2], v = qry[3];if (K <= B) {// 步長不超過根號,先把操作記下來// 差分思想:記錄操作開始的位置以及原運算,再記錄操作結束的位置以及逆運算vec[K][l % K].push_back({l, v});vec[K][l % K].push_back({r + 1, inv(v)});} else {// 步長超過根號,暴力處理for (int i = l; i <= r; i += K) A[i] = A[i] * v % MOD;}}// 枚舉每一類操作for (int k = 1; k <= B; k++) for (int m = 0; m < k; m++) {// 把操作按下標從左到右排序sort(vec[k][m].begin(), vec[k][m].end());// 掃描線維護當前乘積long long now = 1;// 枚舉這一類里的所有下標for (int i = m, j = 0; i < n; i += k) {// 用掃描線進行需要的操作while (j < vec[k][m].size() && vec[k][m][j].first <= i) {now = now * vec[k][m][j].second % MOD;j++;}A[i] = A[i] * now % MOD;}}long long ans = 0;for (int i = 0; i < n; i++) ans ^= A[i];return ans;}
};

感謝大家的點贊和關注,你們的支持是我創作的動力!

?

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

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

相關文章

Matplotlib 可視化大師系列(六):plt.imshow() - 繪制矩陣與圖像的強大工具

目錄Matplotlib 可視化大師系列博客總覽Matplotlib 可視化大師系列&#xff08;六&#xff09;&#xff1a;plt.imshow() - 繪制矩陣與圖像的強大工具一、 plt.imshow() 是什么&#xff1f;何時使用&#xff1f;二、 函數原型與核心參數三、 從入門到精通&#xff1a;代碼示例示…

小游戲AssetBundle加密方案解析

據游戲工委數據統計&#xff0c;2025年1-6月&#xff0c;國內小程序游戲市場實際銷售收入232.76億元&#xff0c;同比增長40.2%。其中內購產生收入153.03億元&#xff0c;占比65.7%&#xff0c;呈逐年提升趨勢。爆款頻出的小游戲&#xff0c;已經成為當下游戲行業的重要增長點。…

linux編程----網絡通信(TCP)

1.TCP特點1.面向數據流&#xff1b;2.有連接通信&#xff1b;3.安全可靠的通信方式&#xff1b;4.機制復雜&#xff0c;網絡資源開銷大&#xff1b;5.本質只能實現一對一的通信&#xff08;可使用TCP的并發方式實現一對多通信&#xff09;&#xff1b;2.TCP的三次握手與四次揮手…

HTTP請求的執行流程

HTTP請求的執行流程是一個系統化的過程&#xff0c;涉及多個網絡協議和交互步驟。以下是完整的流程分解&#xff0c;結合關鍵技術和邏輯順序&#xff1a;&#x1f310; 一、連接準備階段??URL解析與初始化??客戶端&#xff08;瀏覽器/應用&#xff09;解析目標URL&#xff…

聯想win11筆記本音頻失效,顯示差號(x)

該博客可以解答 常見問題詳情 Win10系統安裝更新后右下角聲音出現紅叉&#xff0c;電腦也沒有聲音&#xff0c; 通過設備管理器查看“系統設備”發現“音頻部分“出現黃色感嘆號&#xff0c; 更新驅動、卸載驅動與第三方工具檢測安裝后重啟都不行。 故障原因 應該是用戶曾經…

elasticsearch 7.x elasticsearch 使用scroll滾動查詢中超時問題案例

一 問題 1.1 問題描述 2025-08-21 16:57:53.646 | WARN ||||||||||||| scheduling-1 | ElasticsearchRestTemplate | Could not clear scroll: Unable to parse response body; nested exception is ElasticsearchStatusException [Unable to parse response body]; nested: …

高并發內存池(1)-定長內存池

高并發內存池&#xff08;1&#xff09;-定長內存池 可以采用兩種方式&#xff1a; 方式1&#xff1a; template <size_t N>方式2&#xff1a; template <class T>獲取到T對象大小的內存池&#xff0c;更推薦使用方式二&#xff0c;因為可以動態靈活調整類型 需要的…

第三階段sql server數據-4:數據庫腳本生成,備份與還原,分離與附加操作的圖文步驟

1_生成數據庫腳本&#xff08;1&#xff09;在數據庫上右鍵選擇任務&#xff08;2&#xff09;選擇生成腳本&#xff08;3&#xff09;選擇下一步&#xff0c;如果下次不想顯示此頁面&#xff0c;可勾選不再顯示此頁&#xff08;4&#xff09;如果導出全部數據&#xff0c;選擇…

【C++闖關筆記】STL:string的學習和使用(萬字精講)

?系列文章目錄 第零篇&#xff1a;從C到C入門&#xff1a;C有而C語言沒有的基礎知識總結-CSDN博客 第一篇&#xff1a;【C闖關筆記】封裝①&#xff1a;類與對象-CSDN博客 第二篇&#xff1a;【C闖關筆記】封裝②&#xff1a;友元與模板-CSDN博客 第三篇&#xff1a;【C闖…

06 - spring security角色和權限設置

spring security角色和權限設置 文檔 00 - spring security框架使用01 - spring security自定義登錄頁面02 - spring security基于配置文件及內存的賬號密碼03 - spring security自定義登出頁面04 - spring security關閉csrf攻擊防御05 - spring security權限控制 角色和權限…

如何實現文檔處理全流程自動化?

在處理文本文檔、電子郵件、視頻音頻、社媒帖子等非結構化數據時&#xff0c;我們經常發現這些數據難以用傳統的數據庫表格進行存儲和管理&#xff0c;因為其沒有明確的結構和標準化的格式&#xff0c;因此&#xff0c;這類數據處理難度較大&#xff0c;當傳統“人眼Excel”模式…

Java Main無法初始化主類的原因與解決方法(VsCode工具)

個人操作 由于上傳git將target目錄也上傳了所以在本地刪除target之后再重新同步更新動作然后直接在vscode工具上run本地項目運行報錯&#xff0c;報錯信息如下 報錯信息分析原因1. 工具配置 用 VS Code 的“Run”運行按鈕時&#xff0c;是否會自動編譯&#xff0c;取決于你的 V…

Azure Kubernetes Service (AKS)

Overview AKS&#xff08;Azure Kubernetes Service&#xff09; 是 Microsoft Azure 提供的一種托管Kubernetes 服務&#xff0c;旨在簡化 Kubernetes 集群的部署、管理和操作。輕松運行和擴展基于容器的應用程序&#xff0c;而無需管理 Kubernetes 本身的基礎設施。 AKS與 …

基于SpringBoot的校園信息共享系統【2026最新】

作者&#xff1a;計算機學姐 開發技術&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源碼”。 專欄推薦&#xff1a;前后端分離項目源碼、SpringBoot項目源碼、Vue項目源碼、SSM項目源碼、微信小程序源碼 精品專欄&#xff1a;…

PyTorch API 3 - distributed

文章目錄分布式通信包 - torch.distributed后端支持PyTorch 內置的后端選擇哪個后端&#xff1f;常見環境變量選擇使用的網絡接口其他NCCL環境變量基礎概念初始化返回類型&#xff1a;boolTCP初始化共享文件系統初始化環境變量初始化方法初始化后操作關閉處理重新初始化組Devic…

【K8s】整體認識K8s之Docker篇

首先認識幾個名詞&#xff0c;Docker-ce是docker的社區版本&#xff0c;提供給各種構建、發布、運行容器的工具&#xff1b;docker-ce-cli是社區版本的命令行工具&#xff0c;與docker守護進程進行交互&#xff1b;containerd.io是docker運行時&#xff08;containerd&#xff…

【機器學習】7 Linear regression

本章目錄 7 Linear regression 217 7.1 Introduction 217 7.2 Model specification 217 7.3 Maximum likelihood estimation (least squares) 217 7.3.1 Derivation of the MLE 219 7.3.2 Geometric interpretation 220 7.3.3 Convexity 221 7.4 Robust linear regression * 2…

【衛星通信】超低碼率語音編碼ULBC:EnCodec神經音頻編解碼器架構深度解析

引言 EnCodec是由Meta AI提出的一種端到端神經音頻編解碼器架構&#xff0c;其核心目標是在保證音頻質量的前提下實現高壓縮比和低帶寬傳輸。該模型通過結合卷積神經網絡、殘差矢量量化&#xff08;Residual Vector Quantization, RVQ&#xff09;、多尺度對抗訓練以及Transfor…

08_正則表達式

第8課:正則表達式 課程目標 理解正則表達式的基本概念 掌握常用的正則表達式模式 學習Python中re模塊的使用 能夠編寫簡單的正則表達式 1. 正則表達式基礎 1.1 什么是正則表達式 正則表達式是一種用于匹配字符串模式的工具,可以用于搜索、替換和驗證文本。 1.2 基本語法 …

小迪安全v2023學習筆記(七十一講)—— Python安全反序列化反編譯格式化字符串安全

文章目錄前記WEB攻防——第七十一天Python安全&反序列化利用鏈&PYC文件反編譯&格式化字符串安全Python - PYC-反編譯文件出源碼介紹演示Python - 反序列化-調用鏈&魔術方法各類語言序列化和反序列化函數序列化和反序列化含義Python中常用的序列化/反序列化函數…