LeetCode 分類刷題:2962. 統計最大元素出現至少 K 次的子數組

題目

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

請你統計有多少滿足 「?nums?中的?最大?元素」至少出現?k?次的子數組,并返回滿足這一條件的子數組的數目。

子數組是數組中的一個連續元素序列。

示例 1:

輸入:nums = [1,3,2,3,3], k = 2
輸出:6
解釋:包含元素 3 至少 2 次的子數組為:[1,3,2,3]、[1,3,2,3,3]、[3,2,3]、[3,2,3,3]、[2,3,3] 和 [3,3] 。

示例 2:

輸入:nums = [1,4,2,1], k = 3
輸出:0
解釋:沒有子數組包含元素 4 至少 3 次。

解析

由于子數組越長,包含的元素越多,越能滿足題目要求;反之,子數組越短,包含的元素越少,越不能滿足題目要求。有這種性質的題目,可以用滑動窗口解決。

  1. 設 mx=max(nums)。
  2. 元素 x=nums[right] 進入窗口時,如果 x=mx,把計數器 cntMx 加一。
  3. 如果 cntMx=k,則不斷右移左指針 left,直到窗口中的 mx 的出現次數小于 k 為止。
  4. 內層循環結束后,[left,right] 這個子數組是不滿足題目要求的,但在退出循環之前的最后一輪循環,[left?1,right] 是滿足題目要求的。由于子數組越長,越能滿足題目要求,所以除了 [left?1,right],還有 [left?2,right],[left?3,right],…,[0,right] 都是滿足要求的。也就是說,當右端點固定在 right 時,左端點在 0,1,2,…,left?1 的所有子數組都是滿足要求的,這一共有 left 個,加到答案中。

作者:靈茶山艾府
鏈接:https://leetcode.cn/problems/count-subarrays-where-max-element-appears-at-least-k-times/solutions/2560940/hua-dong-chuang-kou-fu-ti-dan-pythonjava-xvwg/
來源:力扣(LeetCode)

答案

這里我自己AC的寫法和靈神的有一點不一樣,分別如下:

自己的寫法:

class Solution:def countSubarrays(self, nums: List[int], k: int) -> int:m = max(nums)n = len(nums)if k > n:return 0left = 0ans = 0count = 0for right, x in enumerate(nums):    # 移動右指針,擴大窗口if x == m:count += 1    # 更新最大元素出現次數while count == k:    # 滿足最大元素出現k次時ans += n - right    # 從[left...right]到[left...n-1]這些子數組都滿足if nums[left] == m:    # 如果左端點元素等于最大元素count -= 1    # 移動左指針前,將最大元素出現次數減1left += 1    # 移動左指針,縮小窗口return ans

靈神的寫法:

class Solution:def countSubarrays(self, nums: List[int], k: int) -> int:m = max(nums)n = len(nums)if k > n:return 0left = 0ans = 0count = 0for right, x in enumerate(nums):    # 移動右指針,擴大窗口if x == m:count += 1while count == k:    # 滿足最大元素出現k次時,持續移動左指針if nums[left] == m:    # 如果左端點元素等于最大元素count -= 1    # 移動左指針前,將最大元素出現次數減1left += 1ans += left    # 從[0...right]到[left-1...right]都滿足return ans

復雜度分析

時間復雜度:O(n),其中 n 為 nums 的長度。雖然寫了個二重循環,但是內層循環中對 left 加一的總執行次數不會超過 n 次,所以總的時間復雜度為 O(n)。
空間復雜度:O(1)。

作者:靈茶山艾府
鏈接:https://leetcode.cn/problems/count-subarrays-where-max-element-appears-at-least-k-times/solutions/2560940/hua-dong-chuang-kou-fu-ti-dan-pythonjava-xvwg/
來源:力扣(LeetCode)

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

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

相關文章

10分鐘掌握swift

整理一個 10分鐘掌握 Swift 的精華指南,用一個 Demo 串聯 Swift 的核心語法、數據結構、函數、類/結構體和閉包,讓你快速入門。1?? 基礎語法與變量import Foundation // 引入基礎庫// 變量和常量 var name: String "Alice" // 可變 let…

【完整源碼+數據集+部署教程】食品分類與實例分割系統源碼和數據集:改進yolo11-AggregatedAttention

背景意義 研究背景與意義 隨著全球食品產業的快速發展,食品安全和質量控制日益成為社會關注的焦點。食品分類與實例分割技術的應用,能夠有效提升食品識別的準確性和效率,為食品監管、營養分析以及智能餐飲等領域提供重要支持。傳統的食品識別…

C# 中的N+1問題

目錄 含義 影響 避免方法 1. 立即加載(Eager Loading) 2. 顯式加載(Explicit Loading) 3. 投影(Projection) 4. 批處理查詢 5. 禁用延遲加載 含義 N1 問題 是 ORM(對象關系映射&#x…

國內多光譜相機做得好的廠家有哪些?-多光譜相機品牌廠家

多光譜相機是一種能夠同時捕捉多個特定波段的光譜信息,這些波段覆蓋可見光、近紅外以及短波紅外等區域。廣泛應用于遙感、農業、環境監測、工業檢測、安防等領域。近年來,我國在多光譜技術領域取得了顯著進步,涌現出一批技術實力強、產品性能…

如何用外部電腦訪問本地網頁?

之前本來說用內網穿透工具來查看完成這個工具,結果感覺各種不符合心意,突然發現有更簡單的方法。如果想讓兩臺電腦在 同一局域網 內都能訪問運行在 http://localhost:5174/ 上的項目,而不需要使用內網穿透工具,可以通過以下方法實…

PromptPilot — AI 自動化任務的下一個環節

作者:陳大魚頭 github:https://github.com/KRISACHAN 郵箱:chenjinwen77@gmail.com PromptPilot 體驗地址:https://promptpilot.volcengine.com/ 前言 如果大家有關注 AI 相關新聞的話,一定會知道在 2025 年 6 月 11 日火山引擎 FORCE 原動力大會上,豆包大模型 1.6 系列…

[Responsive theme color] 動態更新 | CSS變量+JS操控 | 移動端-漢堡菜單 | 實現平滑滾動

第3章:CSS變量操控 歡迎回來🐻??? 通過前兩章,我們掌握了 動態主題定制 的交互邏輯,以及 色彩工具函數 如何實現色值格式轉換。 本章將揭示技術拼圖的最后一塊:CSS變量動態操控,解析JavaScript如何實…

數學建模 15 邏輯回歸與隨機森林

邏輯回歸(用于分類)用途:通過已有數據,計算出線性方程的參數w后,可以用于預測某一個物品屬于某一類的概率,[0,1];求解思想:邏輯回歸通過最大似然估計(Maximum Likelihood Estimation…

衡石使用指南嵌入式場景實踐之儀表盤嵌入

應用展示交互 應用集市展示應用時會與儀表盤、圖表進行交互操作,主要包括去分析、保存當前過濾快照、字段設置、刷新、全屏、嵌入、導出等功能。 保存當前過濾快照 儀表盤展示數據時往往使用過濾器來查看不同場景下的分析數據。用戶從一種場景切換到另一種場景&a…

Qt | 四種方式實現多線程導出數據功能

前言 在以往的項目開發中,在很多地方用到了多線程。針對不同的業務邏輯,需要使用不同的多線程實現方法,來達到優化項目的目的。本文記錄下在Qt開發中用到的多線程技術實現方法,以導出指定范圍的數字到txt文件為例,展示…

運放的學習筆記以及一些用法的個人看法

負反饋形成了虛短。 你的輸出會對-極產生一個向上的電壓,當你的-的時候就兩邊相等了,這個時候就輸出就不變了,也就是負反饋調節,調節了左邊的電壓差 如果你的右邊輸出已經達到了12v或者0v這個時候你就飽和了,這個時候…

MySQL的三大范式:

目錄 鍵和相關屬性的概念: 第一范式: 第二范式: 第三范式: 總結: 反范式化: 在關系型數據庫中,關于數據表設計的基本原則,規則就稱為范式。 范式是關系數據庫理論的基礎&…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘imageio’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘imageio’問題 摘要 在Python開發過程中,尤其是使用PyCharm等IDE時,遇到pip install報錯是一個常見的問題,尤其是在執行安裝…

2025年高效能工程項目管理軟件推薦榜單:AI重構工程進度可視化與資源動態調度體系

在工程行業數字化深度變革的2025年,項目管理正面臨前所未有的挑戰與機遇。權威數據顯示,68%的工程項目因進度追蹤滯后導致交付延期,超半數企業因數據孤島陷入跨部門協同效率低下的困境,而資源錯配造成的隱性成本損失高達年度預算的15%。隨著AI決策引擎、BIM全流程融合、IoT物聯…

豆包 Java的23種設計模式

Java的23種設計模式是軟件開發中常用的設計思想總結,根據用途可分為三大類:創建型、結構型和行為型。 一、創建型模式(5種) 用于處理對象創建機制,隱藏創建邏輯,使程序更靈活。 單例模式:保證一…

Redis7學習--詳解哨兵,文件配置、主客觀下線

目錄 一、前言 二、哨兵 1、是什么? 2、哨兵的功能 3、案例演示 Redis Sentinel 架構 配置說明 哨兵配置文件 主從配置文件 主節點宕機后各節點狀態 主從切換后配置文件的自動調整 4、哨兵運行流程和選舉原理 SDOWN主觀下線 ODOWN客觀下線 選出新的主節…

Android 項目:畫圖白板APP開發(二)——歷史點、數學方式推導點

上一章我們講解了如何繪制順滑、優美的曲線,為本項目的繪圖功能打下了基礎。本章我們將深入探討兩個關鍵功能的實現:歷史點和數學方式推導點。這些功能將大幅提升我們白板應用的專業性和用戶體驗。一、History點之前在onTouchEvent中獲取的MotionEvent&a…

25. for 循環區別

1. 基本 for 循環 for (let i 0; i < 10; i) {console.log(i); }特點&#xff1a; 適用于已知循環次數的情況使用數字索引進行迭代可以精確控制循環過程性能最好&#xff0c;開銷最小 2. for…in 循環 // 數組示例 for (let i in [1, 2, 3]) {console.log(i, typeof i); //…

Trae 輔助下的 uni-app 跨端小程序工程化開發實踐分享

大家好&#xff0c;我是不如摸魚去&#xff0c;歡迎來到我的AI編程分享專欄。 這次來分享一下&#xff0c;我使用 Trae 作為主要AI編程工具&#xff0c;開發 uni-app 跨平臺小程序的完整實踐經驗。我在實際的開發過程中&#xff0c;探索了 Trae 輔助開發的具體應用場景和效果&…

Vue3 + Element Plus 人員列表搜索功能實現

設計思路使用Element Plus的el-table組件展示人員數據 在姓名表頭添加搜索圖標按鈕 點擊按鈕彈出搜索對話框 在對話框中輸入姓名進行搜索 實現搜索功能并高亮匹配項下面是完整的實現代碼&#xff1a;<!DOCTYPE html> <html lang"zh-CN"> <head><…