LeetCode --- 134雙周賽

題目

3206. 交替組 I

3207. 與敵人戰斗后的最大分數

3208. 交替組 II

3209. 子數組按位與值為 K 的數目

一、交替組 I & II

題目中問環形數組中交替組的長度為3的子數組個數,主要的問題在于它是環形的,我們要考慮首尾相接的情況,如何做?

這里我們可以先遍歷整個數組一次,得到與首元素相接的最長的交替組的長度(當然只看最末尾的兩個元素也可以,但是為了防止數組元素太少等極端情況的條件判斷,這里直接遍歷整個數組比較省事),然后再次遍歷數組開始計數,得到符合要求的交替組個數即可。這里還有一點需要注意,在計數時,我們其實并不關心交替組的長度是否嚴格等于3,只要它的長度>=3就必然能得到一個滿足條件的交替組。代碼如下

class Solution {
public:int numberOfAlternatingGroups(vector<int>& colors) {int n = colors.size(), ans = 0;for(int i = 1, l = 1; i < 2*n; i++){if(colors[i%n]==colors[(i-1)%n]) l = 0;l++;if(i >= n){ans += (l >= 3);}}return ans;}
};

第三題和它一樣,只是將交替組的長度改為參數傳進來了,我們并不關心,只要將上面代碼中的l>=3 改為 l>=k即可,代碼如下

class Solution {
public:int numberOfAlternatingGroups(vector<int>& colors, int k) {int n = colors.size(), ans = 0;for(int i = 1, l = 1; i < 2*n; i++){if(colors[i%n]==colors[(i-1)%n]) l = 0;l++;if(i >= n){ans += (l >= k);}}return ans;}
};

二、與敵人戰斗后的最大分數

這其實是一個簡單的閱讀理解題,簡單來說就是你有初始值currentEnergy,操作一:你可以減去一個比你小且未被標記的數,并得到1分,操作二:如果你有分,你就能獲得其他沒有標記過的數,并標記這些數。如何做讓你的分數盡可能的大?

思路:先找最小值,然后看能否通過它獲得一分(即看currentEnery是否大于等于它),如果小于,則無法獲得分數,返回0,如果大于等于,我們就能獲得除了最小值之外的所有數,然后在和最小值進行相減,獲得分數,最終返回。

代碼如下

class Solution {
public:long long maximumPoints(vector<int>& enemyEnergies, int currentEnergy) {int mn = INT_MAX;long long s = 0;for(auto e:enemyEnergies){s += e;mn = min(mn, e);}if(mn > currentEnergy) return 0;return (s - mn + currentEnergy)/mn;}
};

三、子數組按位與值為k的數目

像這種按位與運算的題,有一種通用的解法,我們先去暴力的求解所有子數組的&結果,然后我們在去優化,優化的思路都是固定的,根據按位與的性質,參與運算的數字越多,按位與的結果越小,原理如下

?所以我們優化之后算法的時間復雜度只有O(nlogU),U=max(nums)。代碼如下

class Solution {
public:long long countSubarrays(vector<int>& nums, int k) {long long ans = 0;int n = nums.size(), l = 0, r = 0;for(int i = 0; i < n; i++) {for(int j = i - 1; j >= 0; j--){if((nums[j] & nums[i]) == nums[j])break;nums[j] &= nums[i];}// 用兩個指針來維護 &結果為k的區間while(l <= i && nums[l] < k) l++;while(r <= i && nums[r] <= k) r++;// nums[l] >= k, nums[r] > kans += (r - l);}return ans;}
};

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

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

相關文章

阿里新開源GPU版本的FunASR安裝避坑

#當前安裝過程沒有cpu版本順利 1.個人在自己的電腦上安裝ubantu系統&#xff0c;以便使用本身的顯卡功能(本人顯卡NVIDIA GeForce RTX 4060)&#xff08;這里需要注意&#xff0c;更新里面有附加驅動安裝驅動會導致黑屏&#xff0c;小伙伴不要心急重裝系統&#xff0c;可以ctr…

ES索引模板

在Elasticsearch中&#xff0c;索引模板&#xff08;Index Templates&#xff09;是用來預定義新創建索引的設置和映射的一種機制。當你創建了一個索引模板&#xff0c;它會包含一系列的默認設置和映射規則&#xff0c;這些規則會在滿足一定條件的新索引被創建時自動應用。 索…

UOS查看系統信息命令行

UOS查看系統信息命令行 *** Rz整理 僅供參考 *** dmidecode查看System Boot信息 midecode -t 32 dmidecode查看System Reset信息 midecode -t 23 dmidecode查看機箱信息 midecode -t chassis dmidecode查看BIOS信息 midecode -t bios dmidecode查看CPU信息 dmidecode …

leetcode 404. 左葉子之和

給定二叉樹的根節點 root &#xff0c;返回所有左葉子之和。 示例 1&#xff1a; 輸入: root [3,9,20,null,null,15,7] 輸出: 24 解釋: 在這個二叉樹中&#xff0c;有兩個左葉子&#xff0c;分別是 9 和 15&#xff0c;所以返回 24示例 2: 輸入: root [1] 輸出: 0提示: 節點…

Linux 下使用Docker安裝redis

redis&#xff1a; 是一個高性能的&#xff0c;鍵值對的&#xff0c;將數據存儲到內存中的非關系型數據庫&#xff08;nosql數據庫 not only sql&#xff09; 高性能&#xff1a;數據存在內存中&#xff0c;直接訪問內存 鍵值對&#xff1a;新聞id&#xff08;鍵&#xff09…

c++數據結構--構造無向圖(算法6.1),深度和廣度遍歷

實驗內容&#xff1a; 實現教材算法6.2利用鄰接矩陣構造無向圖的算法&#xff0c;提供從鄰接矩陣獲得鄰接表的功能&#xff0c;在此基礎上進行深度優先遍歷和廣度優先遍歷。 實驗步驟&#xff1a; &#xff08;1&#xff09;按照實驗要求編寫代碼&#xff0c;構造無向圖。 ?…

淺談數學模型在UGC/AIGC游戲數值調參中的應用(AI智能體)

淺談數學模型在UGC/AIGC游戲數值調參中的應用 ygluu 盧益貴 關鍵詞&#xff1a;UGC、AIGC、AI智能體、大模型、數學模型、游戲數值調參、游戲策劃 一、前言 在策劃大大群提出《游戲工廠&#xff1a;AI&#xff08;AIGC/ChatGPT&#xff09;與流程式游戲開發》討論之后就已完…

Hi3861 OpenHarmony嵌入式應用入門--HTTPD

httpd 是 Apache HTTP Server 的守護進程名稱&#xff0c;Apache HTTP Server 是一種廣泛使用的開源網頁服務器軟件。 本項目是從LwIP中抽取的HTTP服務器代碼&#xff1b; Hi3861 SDK中已經包含了一份預編譯的lwip&#xff0c;但沒有開啟HTTP服務器功能&#xff08;靜態庫無法…

NiFi1.25版本HTTPS模式下RestAPI使用入門

Apache NiFi 是一個強大的數據流處理工具&#xff0c;通過其 REST API&#xff0c;用戶可以遠程管理和控制數據流處理器。本文將介紹如何使用 NiFi 1.25 版本HTTPS 模式下Rest API&#xff0c;包括獲取 token、獲取組件信息、啟動和停止組件、以及更改組件的調度頻率等操作。 …

Linux vim文本編輯器

Vim&#xff08;Vi IMproved&#xff09;是一個高度可配置的文本編輯器&#xff0c;它是Vi編輯器的增強版本&#xff0c;廣泛用于程序開發和系統管理。Vim不僅保留了Vi的所有功能&#xff0c;還增加了許多新特性&#xff0c;使其更加強大和靈活。 Vim操作模式 普通模式&#xf…

科普文:微服務之Apollo配置中心

1. 基本概念 由于Apollo 概念比較多&#xff0c;剛開始使用比較復雜&#xff0c;最好先過一遍概念再動手實踐嘗試使用。 1.1、背景 隨著程序功能的日益復雜&#xff0c;程序的配置日益增多&#xff0c;各種功能的開關、參數的配置、服務器的地址……對程序配置的期望值也越來…

在 C++中,如何使用智能指針來有效地管理動態分配的內存,并避免內存泄漏的問題?

在C中&#xff0c;可以使用智能指針來有效地管理動態分配的內存&#xff0c;避免內存泄漏的問題。下面是一些常用的智能指針類型和操作&#xff1a; std::unique_ptr&#xff1a; std::unique_ptr是C11引入的一種獨占式智能指針&#xff0c;它擁有對分配的內存的唯一所有權。當…

026-GeoGebra中級篇-曲線(2)_極坐標曲線、參數化曲面、分段函數曲線、分形曲線、復數平面上的曲線、隨機曲線、非線性動力系統的軌跡

除了參數曲線、隱式曲線和顯式曲線之外&#xff0c;還有其他類型的曲線表示方法。本篇主要概述一下極坐標曲線、參數化曲面、分段函數曲線、分形曲線、復數平面上的曲線、隨機曲線、和非線性動力系統的軌跡&#xff0c;可能沒有那么深&#xff0c;可以先了解下。 目錄 1. 極坐…

「網絡通信」HTTP 協議

HTTP &#x1f349;簡介&#x1f349;抓包工具&#x1f349;報文結構&#x1f34c;請求&#x1f34c;響應&#x1f34c;URL&#x1f95d;URL encode &#x1f34c;方法&#x1f34c;報文字段&#x1f95d;Host&#x1f95d;Content-Length & Content-Type&#x1f95d;User…

運動控制問題

第一類運動控制問題是指被控制對象的空間位置或軌跡運動發生改變的運動控制系統的控制問題。這類運動控制問題在理論上完全遵循牛頓力學定律和運動學原則。 1、運動控制問題 第1類運動控制的核心是研究被控對象的運動軌跡 、分析運動路徑、運動速度、加速度與時間的關系,常用…

深入解析PHP框架:Symfony框架詳解與應用

文章目錄 深入解析PHP框架&#xff1a;Symfony框架詳解與應用一、什么是Symfony&#xff1f;Symfony的優勢 二、Symfony的核心概念1. 控制器2. 路由3. 模板4. 服務容器5. 事件調度器 三、Symfony的主要功能1. 表單處理2. 數據庫集成3. 安全性4. 國際化5. 調試與日志 四、開發流…

記一次docker容器安裝MySQL,navicat無法連接報錯(10060錯誤)

今天在云服務器上使用docker部署mysql 8.0.11時&#xff0c;遇到了一個詭異的問題&#xff0c;在云服務器的docker容器內可以連接上mysql&#xff0c;然而在自己電腦上連接mysql時報錯&#xff1a;Can‘t connect to MySQL server on localhost (10060) 下面是網上搜尋的幾種可…

SpringMVC框架--個人筆記步驟總結

一、步驟 1.創建工程 2.加入springmvc依賴--pom.xml <!--springmvc依賴--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RELEASE</version> </depend…

Camunda如何通過外部任務與其他系統自動交互

文章目錄 簡介流程圖外部系統pom.xmllogback.xml監聽類 啟動流程實例常見問題Public Key Retrieval is not allowed的解決方法java.lang.reflect.InaccessibleObjectException 流程圖xml 簡介 前面我們已經介紹了Camunda的基本操作、任務、表&#xff1a; Camunda組件與服務與…

Linux命令更新-Vim 編輯器

簡介 Vim 是 Linux 系統中常用的文本編輯器&#xff0c;功能強大、可擴展性強&#xff0c;支持多種編輯模式和操作命令&#xff0c;被廣泛應用于程序開發、系統管理等領域。 1. Vim 命令模式 Vim 啟動后默認進入命令模式&#xff0c;此時鍵盤輸入的命令將用于控制編輯器本身&…