【學會動態規劃】最長湍流子數組(23)

目錄

動態規劃怎么學?

1. 題目解析

2. 算法原理

1. 狀態表示

2. 狀態轉移方程

3. 初始化

4. 填表順序

5. 返回值

3. 代碼編寫

寫在最后:


動態規劃怎么學?

學習一個算法沒有捷徑,更何況是學習動態規劃,

跟我一起刷動態規劃算法題,一起學會動態規劃!

1. 題目解析

題目鏈接:978. 最長湍流子數組 - 力扣(LeetCode)

題目說要找出最長的湍流子數組,但是他的題干太長了,而且不止所云,

所以我們直接通過用例來分析什么是湍流子數組,

通過示例一我們知道了,湍流子數組就是一個大一小一個大一個小的子數組,

通過示例二我們知道了,如果數組一直是遞增/遞減,最長就是 2,

通過示例三我們知道了,如果數組只有一個元素,那么長度就是 1。

2. 算法原理

1. 狀態表示

我們還是從 dp [ i ] 來分析,

dp [ i ] 表示以 i 位置為結尾的所有子數組中,最長的湍流子數組的長度。

實際上他一共存在兩種情況:

f [ i ] 表示?i 位置為結尾的所有子數組中,上升狀態時最長的湍流子數組的長度,

g?[ i ] 表示?i 位置為結尾的所有子數組中,下降狀態時最長的湍流子數組的長度,

2. 狀態轉移方程

f [ i ] 分為三種情況:

當 f [ i - 1 ] >?f [ i ] ,要想進入上升狀態就得重新計算,所以變成 1?

當 f [ i - 1 ] <?f [ i ] ,下降狀態的最長長度就是 g [ i - 1 ] + 1

當 f [ i - 1 ] ==?f [ i ] ,要想進入平緩狀態就得重新計算,所以變成 1

g [ i ] 也同樣是這三種情況:

當 g?[ i - 1 ] > g?[ i ] ,上升狀態的最長長度就是 f?[ i - 1 ] + 1

當 g?[ i - 1 ] < g?[ i ] ,要想進入下降狀態就得重新計算,所以變成 1?

當 g?[ i - 1 ] == g?[ i ] ,要想進入平緩狀態就得重新計算,所以變成 1

3. 初始化

我們可以把所有位置先初始化成 1 作為初始值

4. 填表順序

從左往右,兩個表一起填。

5. 返回值

返回兩個表里面的最大值。

3. 代碼編寫

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

寫在最后:

以上就是本篇文章的內容了,感謝你的閱讀。

如果感到有所收獲的話可以給博主點一個哦。

如果文章內容有遺漏或者錯誤的地方歡迎私信博主或者在評論區指出~

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

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

相關文章

vue+elementui 實現文本超出長度顯示省略號,鼠標移上懸浮展示全部內容

一、場景 表單內的輸入框一般為固定寬度&#xff0c;當輸入框內容長度超出輸入框寬度時&#xff0c;需要顯示省略號&#xff0c;并設置鼠標移到輸入框上時懸浮展示全部內容。 <el-tooltipplacement"top-start"effect"light":content"basicData[Or…

在 IDEA 中使用 Git開發 圖文教程

在 IDEA 中使用 Git開發 圖文教程 一、連接遠程倉庫二、IDEA利用Git進行開發操作三、分支操作3.1 新建分支3.2 切換分支3.3 刪除分支3.4 比較分支3.5 合并分支 四、常用快捷鍵 一、連接遠程倉庫 一、打開IDEA&#xff0c;進入目錄&#xff1a;File ->New ->Project from…

Skywalking全鏈路追蹤【學習筆記】

Skywalking全鏈路追蹤的服務搭建&#xff0c;使用docker進行安裝。 搭建服務 搭建【ES】 # 拉取 docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.10 # 啟動 docker run -p 127.0.0.1:9200:9200 -p 127.0.0.1:9300:9300 -e "discovery.typesingle-nod…

什么是 SPI,和API有什么區別?

面試回答 Java 中區分 API 和 SPI&#xff0c;通俗的講&#xff1a;API 和 SPI 都是相對的概念&#xff0c;他們的差別只在語義上&#xff0c;API 直接被應用開發人員使用&#xff0c;SPI 被框架擴展人員使用。 API Application Programming Interface 大多數情況下&#xff…

opencv 矩陣運算

1.矩陣乘&#xff08;*&#xff09; Mat mat1 Mat::ones(2,3,CV_32FC1);Mat mat2 Mat::ones(3,2,CV_32FC1);Mat mat3 mat1 * mat2; //矩陣乘 結果 2.元素乘法或者除法&#xff08;mul&#xff09; Mat m Mat::ones(2, 3, CV_32FC1);m.at<float>(0, 1) 3;m.at…

瀏覽器控制臺調試實用方法

許多程序員僅知道控制臺的console.log&#xff0c;其實控制臺API還包含一些其他實用方法&#xff0c; 這些方法在前端調試時會很有幫助。 目錄 console.dir 查看對象屬性和方法 輸出DOM元素 console.error console.time和console.timeEnd console.log console.clear 總結…

set NOCOUNT on

SET NOCOUNT ON 是一條 SQL 語句&#xff0c;用于禁止在執行查詢時返回受影響的行數消息。通常&#xff0c;當執行 INSERT、UPDATE、DELETE 等操作時&#xff0c;數據庫會返回一個消息&#xff0c;表示受影響的行數。但在某些情況下&#xff0c;你可能希望禁用這些消息&#xf…

(五)、深度學習框架源碼編譯

1、源碼構建與預構建&#xff1a; 源碼構建&#xff1a; 源碼構建是通過獲取軟件的源代碼&#xff0c;然后在本地編譯生成可執行程序或庫文件的過程。這種方法允許根據特定需求進行配置和優化&#xff0c;但可能需要較長的時間和較大的資源來編譯源代碼。 預構建&#xff1a; 預…

dubbo與zookeeper

ZooKeeper 在 Dubbo 應用中的作用 ZooKeeper 是一個開源的分布式協調服務&#xff0c;它在 Dubbo 中被廣泛使用來實現服務注冊、發現和配置管理等功能。在 Dubbo 架構中&#xff0c;ZooKeeper 扮演了一個重要的角色&#xff0c;可以提供以下功能&#xff1a; ZooKeeper 是一個開…

2023年05月 C/C++(二級)真題解析#中國電子學會#全國青少年軟件編程等級考試

第1題:數字放大 給定一個整數序列以及放大倍數x,將序列中每個整數放大x倍后輸出。 時間限制:1000 內存限制:65536 輸入 包含三行: 第一行為N,表示整數序列的長度(N ≤ 100); 第二行為N個整數(不超過整型范圍),整數之間以一個空格分開; 第三行包含一個整數(不超過整…

【RocketMQ】SpringBoot集成RocketMQ

SpringBoot集成RocketMQ 首先依舊是引入依賴 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.2.2</version> </dependency>然后就可以編寫發送不同類…

Vue2-全局事件總線、消息的訂閱與發布、TodoList的編輯功能、$nextTick、動畫與過渡

&#x1f954;&#xff1a;高度自律即自由 更多Vue知識請點擊——Vue.js VUE2-Day9 全局事件總線1、安裝全局事件總線2、使用事件總線&#xff08;1&#xff09;接收數據&#xff08;2&#xff09;提供數據&#xff08;3&#xff09;組件銷毀前最好解綁 3、TodoList中的孫傳父&…

【Git】Git中用到的一些命令

Git文件有四種狀態&#xff1a; 未跟蹤未修改&#xff08;已跟蹤&#xff09;已修改&#xff08;已跟蹤&#xff09;已暫存&#xff08;已跟蹤&#xff09; 通常我們將項目clone下來就會處于已跟蹤狀態 1、git diff命令 git diff&#xff1a;查看沒有暫存的文件更新哪些部分…

js判斷手指的上滑,下滑,左滑,右滑,事件監聽 和 判斷鼠標滾輪向上滾動滑輪向下滾動

js判斷手指的上滑&#xff0c;下滑&#xff0c;左滑&#xff0c;右滑&#xff0c;事件監聽 和 判斷鼠標滾輪向上滾動滑輪向下滾動 pc端 判斷鼠標滾輪向上滾動滑輪向下滾動 const scrollFunc (e) > { e e || window.event; let wheelDelta e.wheelDelta ? e.wheelDelta…

Spring Clould 部署 - Docker

視頻地址&#xff1a;微服務&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初識Docker-什么是Docker&#xff08;P42&#xff0c;P43&#xff09; 微服務雖然具備各種各樣的優勢&#xff0c;但服務的拆分通用給部署帶來了很大的麻煩。 分布式系統中&…

[強網杯 2019]隨便注

輸入1‘ 輸入1“ 和輸入1 一樣說明是由‘閉合 然后我們嘗試輸入select 這里提示過濾了select&#xff0c;說明聯合查詢&#xff0c;報錯注入&#xff0c;布爾,時間盲注就都不可以使用了。我們只剩下了 堆疊注入。 或者將select編碼繞開也可以。 按sql注入測試1 or 11 # ?然…

Unity 物體的運動之跟隨鼠標

你想讓鼠標點擊哪里&#xff0c;你的運動的對象就運動到哪里嗎&#xff1f; Please follow me ! 首先&#xff0c;你要先添加一個Plane ,以及你的圍墻&#xff0c;你的移動的物體 想要實現跟隨鼠標移動&#xff0c;我們先創建一個腳本 using System.Collections; using Syst…

銅卡計混合法比熱測試儀絕熱量熱計的高精度主動控制解決方案

摘要&#xff1a;在下落法比熱容測試中絕熱量熱計的漏熱是最主要誤差源&#xff0c;為實現絕熱量熱計的低漏熱要求&#xff0c;本文介紹了主動護熱式等溫絕熱技術以及相應的解決方案。方案的核心一是采用循環水冷卻金屬圓筒給量熱計和護熱裝置提供低溫環境或恒定冷源&#xff0…

黑馬點評-項目集成git及redis實現短信驗證碼登錄

目錄 IDEA集成git 傳統session存在的問題 redis方案 業務流程 選用的數據結構 整體訪問流程 發送短信驗證碼 獲取校驗驗證碼 配置登錄攔截器 攔截器注冊配置類 攔截器 用戶狀態刷新問題 刷新問題解決方案 IDEA集成git 遠程倉庫采用碼云&#xff0c;創建好倉庫&…

【O2O領域】Axure外賣訂餐騎手端APP原型圖,外賣配送原型設計圖

作品概況 頁面數量&#xff1a;共 110 頁 兼容軟件&#xff1a;Axure RP 9/10&#xff0c;不支持低版本 應用領域&#xff1a;外賣配送、生鮮配送 作品申明&#xff1a;頁面內容僅用于功能演示&#xff0c;無實際功能 作品特色 本品為外賣訂餐騎手端APP原型設計圖&#x…