【刷題篇】動態規劃(六)

文章目錄

  • 1、最大子數組和
  • 2、環形子數組的最大和
  • 3、乘積最大子數組
  • 4、乘積為正數的最長子數組長度
  • 5、 等差數列劃分
  • 6、最長湍流子數組

1、最大子數組和

給你一個整數數組 nums ,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。
子數組 是數組中的一個連續部分。
在這里插入圖片描述

class Solution {
public:int maxSubArray(vector<int>& nums) {int size=nums.size();vector<int> dp(size+1);int maxi=-0X3F3F3F3F;for(int i=1;i<=size;i++){dp[i]=max(nums[i-1],dp[i-1]+nums[i-1]);maxi=max(maxi,dp[i]);}return maxi;}
};

2、環形子數組的最大和

給定一個長度為 n 的環形整數數組 nums ,返回 nums 的非空 子數組 的最大可能和 。
環形數組 意味著數組的末端將會與開頭相連呈環狀。形式上, nums[i] 的下一個元素是 nums[(i + 1) % n] , nums[i] 的前一個元素是 nums[(i - 1 + n) % n] 。
子數組 最多只能包含固定緩沖區 nums 中的每個元素一次。形式上,對于子數組 nums[i], nums[i + 1], …, nums[j] ,不存在 i <= k1, k2 <= j 其中 k1 % n == k2 % n 。
在這里插入圖片描述

class Solution {
public://分為兩種情況考慮int maxSubarraySumCircular(vector<int>& nums) {int n=nums.size();vector<int> d(n+1),p(n+1);int maxi=-0x3F3F3F3F,mini=0x3F3F3F3F,sum=0;for(int i=1;i<=n;i++){   int x=nums[i-1];d[i]=max(x,d[i-1]+x);maxi=max(d[i],maxi);p[i]=min(x,p[i-1]+x);mini=min(mini,p[i]);sum+=x;} return sum==mini?maxi:max((sum-mini),maxi);}
};

3、乘積最大子數組

給你一個整數數組 nums ,請你找出數組中乘積最大的非空連續子數組(該子數組中至少包含一個數字),并返回該子數組所對應的乘積。
測試用例的答案是一個 32-位 整數。
子數組 是數組的連續子序列
在這里插入圖片描述

class Solution {
public:int maxProduct(vector<int>& nums) {int n=nums.size();//d最大值,p最小值vector<int> d(n+1),p(n+1);d[0]=p[0]=1;int maxi=-0x3F3F3F3F;for(int i=1;i<=n;i++){int x=nums[i-1],a=d[i-1]*nums[i-1],b=p[i-1]*nums[i-1];d[i]=max(x,max(a,b));p[i]=min(x,min(a,b));maxi=max(maxi,d[i]);}   return maxi;}
};

4、乘積為正數的最長子數組長度

給你一個整數數組 nums ,請你求出乘積為正數的最長子數組的長度。
一個數組的子數組是由原數組中零個或者更多個連續數字組成的數組。
請你返回乘積為正數的最長子數組長度。

在這里插入圖片描述

class Solution {
public:int getMaxLen(vector<int>& nums) {int n=nums.size();vector<int> d(n+1),p(n+1);//一個放正數,一個放負數d[0]=p[0]=0;int maxi=-0x3F3F3F3F;for(int i=1;i<=n;i++){if(nums[i-1]>0){d[i]=d[i-1]+1;p[i]=p[i-1]==0?0:p[i-1]+1;}else if(nums[i-1]<0){d[i]=p[i-1]==0?0:p[i-1]+1;p[i]=d[i-1]+1;}maxi=max(maxi,d[i]);}return maxi;}   
};

5、 等差數列劃分

如果一個數列 至少有三個元素 ,并且任意兩個相鄰元素之差相同,則稱該數列為等差數列。
例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差數列。
給你一個整數數組 nums ,返回數組 nums 中所有為等差數組的 子數組 個數。
子數組 是數組中的一個連續序列。
在這里插入圖片描述

class Solution {
public:int numberOfArithmeticSlices(vector<int>& nums) {int n=nums.size();vector<int> dp(n);int sum=0;for(int i=2;i<n;i++){dp[i]=nums[i]-nums[i-1]==nums[i-1]-nums[i-2]?dp[i-1]+1:0;sum+=dp[i];}return sum;}
};

6、最長湍流子數組

給定一個整數數組 arr ,返回 arr 的 最大湍流子數組的長度 。
如果比較符號在子數組中的每個相鄰元素對之間翻轉,則該子數組是 湍流子數組 。
更正式地來說,當 arr 的子數組 A[i], A[i+1], …, A[j] 滿足僅滿足下列條件時,我們稱其為湍流子數組:
在這里插入圖片描述

class Solution {
public:int maxTurbulenceSize(vector<int>& arr) {int n=arr.size();vector<int> d(n,1),p(n,1);if(n==1)return 1;int maxi=-0x3F3F3F3F;for(int i=1;i<n;i++){if(arr[i-1]<arr[i])d[i]=p[i-1]+1;else if(arr[i-1]>arr[i])p[i]=d[i-1]+1;maxi=max(maxi,max(d[i],p[i]));}return maxi;}
};

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

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

相關文章

【Unity動畫】Avatar Mask

創建 Avatar Mask可以設置那一部分骨骼運動和不運動 然后放在狀態機里面的層中來混合 【后續完善】

深入探索 Rust 宏編程

Rust 宏提供了一種強大的方法來編寫抽象和重用代碼,它們在 Rust 編程中扮演著重要的角色。本文將深入探索 Rust 宏的概念、類型、使用方法以及如何實現自定義宏,以提供一個全面的 Rust 宏編程指南。 Rust 宏簡介 宏是 Rust 中的一種元編程工具,它們在編譯時運行,用于生成…

linux安裝node

文章目錄 安裝node 安裝node 一次手操記錄 - 首先安裝wget yum install -y wget - 下載nodejs最新的tar包 wget https://cdn.npm.taobao.org/dist/node/v12.12.0/node-v12.12.0-linux-x64.tar.xz - 解壓包 tar -xvf node-v12.12.0-linux-x64.tar.xz - 部署bin文件 先確認你no…

30 張圖解 HTTP 常見的面試題

前言 在面試過程中&#xff0c;HTTP 被提問的概率還是比較高的 我搜集了 5 大類 HTTP 面試常問的題目&#xff0c;同時這 5 大類題跟 HTTP 的發展和演變關聯性是比較大的&#xff0c;通過問答 圖解的形式由淺入深的方式幫助大家進一步的學習和理解 HTTP 協議。 HTTP 基本概…

第四節JavaScript 條件語句、循環語句、break與continue語句

一、JavaScript條件語句 在通常的代碼中&#xff0c;我們有一些需要決定執行不同動作&#xff0c;這就可以在代碼中使用條件語句來完成。 下面是我們常使用的條件語句&#xff1a; if語句&#xff1a;只有當指定條件是true時&#xff0c;執行條件內代碼。if…else語句&#…

JavaScript數組的長度

JavaScript數組的長度可以通過數組對象的length屬性來獲取&#xff0c;長度表示數組中元素的數量。 代碼示例&#xff1a; let arr []; // 定義一個空數組 console.log(arr.length); // 輸出 0arr.push(1); // 給數組添加元素 arr.push(2); arr.push(3); console.log(arr.le…

項目二 創建與操作學生管理數據庫

項目二 創建與操作學生管理數據庫 #目標 創建庫&#xff1b;查看庫&#xff1b;操作庫&#xff1b;圖形工具操作庫1&#xff0c;創建學生管理數據庫 #創建數據庫 CREATE DATABASE [IF NOT EXISTS] db_name [[DEFAULT] CHARACTER SET charset_name] [[DEFAULT] COLLATE collat…

44.0/認識前端

44.1 目錄 44.1.1 網頁 44.1.1.1 網頁的組成 44.1.1.2 網頁的分類 44.1.2 網站 44.1.2.1 網站的分類 44.1.3 主頁 44.2. Internet、IP 地址和域名 44.2.1 Internet 44.2.2 IP 44.2.3 域名 44.3. Web 前端技術概述 44.3.1 html5 44.3.2 CSS3 44.3.3 Javascript …

hbuiler中使用npm安裝datav

注&#xff1a;datav邊框樣式目前使用時&#xff1a;適用于網頁&#xff0c;不適用于app 1、先安裝node 安裝、配置Node路徑 2、為Node配置環境變量 3、在hbuilder的設置中填寫node的路徑 配置 4、打開cmd輸入npm install jiaminghi/data-view 安裝dataV&#xff0c;&…

當初為什么選擇計算機-希望一直干下去

還記得當初自己為什么選擇計算機&#xff1f; 當初你問我為什么選擇計算機&#xff0c;我笑著回答&#xff1a;“因為我夢想成為神奇的碼農&#xff01;我想像編織魔法一樣編寫程序&#xff0c;創造出炫酷的虛擬世界&#xff01;”誰知道&#xff0c;我剛入門的那天&#xff0…

.360勒索病毒數據恢復|金蝶、用友、管家婆、OA、速達、ERP等軟件數據庫恢復

尊敬的讀者&#xff1a; 在數字時代&#xff0c;.360勒索病毒如同數字的幽靈&#xff0c;悄無聲息地侵入用戶的數字領域&#xff0c;將珍貴的數據文件變為數字的囚牢。本文將介紹.360勒索病毒的特征&#xff0c;提供解密和數據恢復的方法&#xff0c;并分享有效的預防措施&…

【PID學習筆記 9 】控制系統的分析方法之二

寫在前面 前文重點介紹時域分析法、本文將繼續學習控制系統的另外幾種分析方法&#xff0c;包括根軌跡法、頻率分析法、狀態空間分析法。再次強調&#xff0c;在這里只是做了一個系統化的概述&#xff0c;目的是讓學習PID&#xff0c;特別是用PID的工程人員有一個對基礎知識的…

【開源】基于JAVA語言的數字化社區網格管理系統

項目編號&#xff1a; S 042 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S042&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S042&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊三、開發背景四、系統展示五、核心源碼5…

SELinux零知識學習三十八、SELinux策略語言之約束(2)

接前一篇文章:SELinux零知識學習三十七、SELinux策略語言之約束(1) 四、SELinux策略語言之約束 SELinux對策略允許的訪問提供了更嚴格的約束機制,不管策略的allow規則如何。 SELinux有兩種類型的約束: constrain語句constrain語句是最常見的約束,使得可以基于用戶、角色…

3.DevEco Studio安裝鴻蒙手機app本地模擬器

配合Intel CPU啟動模擬器 解決措施 打開任務管理器&#xff0c;在“性能”選項&#xff0c;檢查CPU虛擬化是否已經啟用。如果未啟用&#xff0c;需要進入電腦的BIOS中&#xff0c;將CPU的“Intel Virtualization Technology”選項開啟。 點擊New Emulator 文檔中心 解決措施…

鐵路通信鐵塔監測方案

目錄 1.監測的背景及意義 1.1監測背景 1.2監測意義 2.系統介紹及特點 2.1系統介紹 2.2系統特點 3.系統設計 3.1監測內容 3.2總體介紹 3.3詳細設計 3.3.1垂直度監測 3.3.2水平位移、沉降監測 3.3.3環境監測 3.3.4應力應變監測 3.3.5裂縫監測 3.3.6云平臺綜合在線…

VBA技術資料MF93:將多個Excel表插入PowerPoint不同位置

我給VBA的定義&#xff1a;VBA是個人小型自動化處理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高數據的準確度。我的教程一共九套&#xff0c;分為初級、中級、高級三大部分。是對VBA的系統講解&#xff0c;從簡單的入門&#xff0c;到…

TypeScript 之 console的使用

語言&#xff1a; TypeScript 在線工具&#xff1a; PlayGround console console 對象是一個非常強大的控制臺日志顯示工具&#xff0c; 可以幫助我們在瀏覽器中調試代碼。 注&#xff1a; console不屬于TypeScript的語法&#xff0c;而是由JavaScript封裝的內置對象。 簡單的…

C語言精選——選擇題Day42

第一題 1. 下面程序輸出的結果是&#xff08;&#xff09; #include <stdio.h> int main () {int x;x printf("I See, Sea in C");printf("x%d" , x); } A&#xff1a;2 B&#xff1a;隨機值 C&#xff1a;都不是 D&#xff1a;15 答案及解析 D p…

【Python/Java/C++三種語言】20天拿下華為OD筆試之【位運算】2023B-出錯的或電路【歐弟算法】全網注釋最詳細分類最全的華為OD真題

文章目錄 題目描述與示例題目描述輸入描述輸出描述示例一輸入輸出說明 示例二輸入輸出說明 解題思路代碼PythonJavaC時空復雜度 華為OD算法/大廠面試高頻題算法練習沖刺訓練 題目描述與示例 題目描述 某生產門電路的廠商發現某一批次的或門電路不穩定&#xff0c;具體現象為計…