經典算法 最長單調遞增子序列

最長單調遞增子序列

問題描述

找出由n個數組成的序列的最長單調遞增子序列。

示例輸入

9
2 1 5 3 6 4 8 9 7

示例輸出

5

示例輸入

6
5 6 7 1 2 8

示例輸出

4

c++代碼(動態規劃 O(n^2))

#include<bits/stdc++.h>using namespace std;int main() {int n, ans = 0;cin >> n;vector<int> arr(n), dp(n, 1);for (int i = 0; i < n; i++) cin >> arr[i];for (int i = 0; i < n; i++) {for (int j = i - 1; j >= 0; j--) {if (arr[i] > arr[j]) dp[i] = max(dp[i], dp[j] + 1);}}for (int i = 0; i < n; i++) ans = max(ans, dp[i]);cout << ans;return 0;
}

c++代碼(貪心+二分 O(nlogn))

#include <bits/stdc++.h>using namespace std;int main() {int n;cin >> n;vector<int> arr(n);for (int i = 0; i < n; i++) cin >> arr[i];vector<int> ans;for (int i = 0; i < n; i++) {if (ans.size() == 0 || arr[i] > ans.back()) ans.push_back(arr[i]);else {auto k = lower_bound(ans.begin(), ans.end(), arr[i]);*k = arr[i];}}cout << ans.size();return 0;
}//by wqs

算法解析

動態規劃法解析

dp[i]表示以i結尾的最長單調遞增子序列的長度,則遍歷i之前的dp[j],如果arr[j] < arr[i],說明arr[i]可以拼接在dp[j]的后面。

所以dp[i] = dp[j] + 1,考慮到有很多j,取最大值,dp[i] = max(dp[i], dp[j] + 1);

貪心+二分算法解析

考慮到最長單調子序列的單調遞增,二分查詢很快,所以有了這個算法。

我們盡量讓序列越長越好,序列里面的數越小越好,為什么呢

例如

7 1 8 2 9 3 10 5

8 9 10不可以選5

而1 2 3可以選5

前面的數越小,后面的數加進來的概率越大

下面給出過程

7

1,由于7 > 1,不如替換為1,讓后面的數容易加入序列

1 8

1 2,由于8 > 2不如替換為2,讓后面的數容易加入序列

1 2 9

1 2 3,由于9 > 3,不如替換為3,讓后面的數容易加入序列

1 2 3 10

1 2 3 5,由于10 > 5,不如替換為5,讓后面的數容易加入序列

每次我們要加入一個數的時候

如果可以直接加入序列末尾,就加入序列末尾,

否則我們二分查找第一個大于或者等于它的位置,將那個位置換成它。

這樣操作,后面的數中選率大

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

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

相關文章

【語法】C++繼承中遇到的問題及解決方法

目錄 1.子類構造函數中初始化父類成員 2.子類顯式調用父類的析構函數 第一種說法&#xff1a;重定義 反駁&#xff1a; 第二種說法&#xff1a;operator~ 3.因編譯器版本過低而出現錯誤 貼主在學習C的繼承時&#xff0c;遇到了很多問題&#xff0c;覺得很變態&#xff0c…

前綴和 后綴和 --- 尋找數組的中心下標

題目鏈接 尋找數組的中心下標 給你一個整數數組 nums &#xff0c;請計算數組的 中心下標 。 數組 中心下標 是數組的一個下標&#xff0c;其左側所有元素相加的和等于右側所有元素相加的和。 如果中心下標位于數組最左端&#xff0c;那么左側數之和視為 0 &#xff0c;因為…

NVIDIA --- 端到端自動駕駛

前言 參加了NVIDIA 高級輔助駕駛開發者實驗室的活動&#xff0c;本次活動基于 NVIDIA 汽車行業的端到端解決方案——DRIVE AGX? 平臺&#xff0c;實現高級別智能和安全性的軟硬件開發工具和 AV 基礎設施。并且NVIDIA自動駕駛實驗室推出了一系列自動駕駛算法最新的前沿研究視頻…

SQL實戰:03之SQL中的遞歸查詢

文章目錄 概述SQL 中的遞歸實現題目一:分析組織層級題解題目二:樹節點求解題解步驟一&#xff1a;通過遞歸查詢出每個節點的上級節點和下級節點分布步驟二&#xff1a;分組統計 概述 最近刷題時遇到了一道需要根據組織層級來統計各個層級的一些數據&#xff0c;當時碰到時的第…

MySQL 語法與基礎完全指南

MySQL 是最流行的開源關系型數據庫管理系統之一&#xff0c;廣泛應用于 Web 應用程序開發。本文將全面介紹 MySQL 的基礎知識和完整語法結構。 一、MySQL 基礎概念 1. 數據庫基本術語 數據庫(Database): 存儲數據的集合 表(Table): 數據以表格形式組織 列(Column): 表中的一…

【Sqlalchemy Model轉換成Pydantic Model示例】

【Sqlalchemy Model轉換成Pydantic Model示例】 由于Sqlalchemy和Pydantic的模型字段類型可能有差異, 所以需要一個通用的裝換類 def sqlalchemy_to_pydantic_v2(sqlalchemy_model, pydantic_model):"""通用函數&#xff0c;將 SQLAlchemy 模型實例轉換為 Pyd…

2025年歐洲西南部大停電

2025年4月28日&#xff0c;歐洲西南部出現大規模停電&#xff0c;西班牙、葡萄牙和法國南部均受到影響。有報道指出停電可能與 歐洲電網出現問題有關&#xff0c;但最終原因尚未確定。由于停電&#xff0c;上述地區的交通和通信服務均受到嚴重影響&#xff0c;交通信號燈停止工…

Java EE初階——計算機是如何工作的

1. cpu 馮諾依曼體系&#xff08;Von Neumann Architecture&#xff09; ? CPU 中央處理器: 進?算術運算和邏輯判斷. ? 存儲器: 分為外存和內存, ?于存儲數據(使??進制?式存儲) ? 輸?設備: ??給計算機發號施令的設備. ? 輸出設備: 計算機個??匯報結果的設…

飛鳥游戲模擬器 1.0.3 | 完全免費無廣告,內置大量經典童年游戲,重溫美好回憶

飛鳥游戲模擬器是一款專為安卓用戶設計的免費游戲模擬器&#xff0c;內置了大量經典的童年游戲。該模擬器擁有豐富的游戲資源&#xff0c;目前已有約20,000款游戲&#xff0c;包括多種類型如冒險、動作、角色扮演等。用戶可以直接搜索查找想要玩的游戲進行下載并啟動。游戲庫中…

網絡爬取需謹慎:警惕迷宮陷阱

一、技術背景:網絡爬蟲與數據保護的博弈升級 1. 問題根源:AI訓練數據爬取的無序性 數據需求爆炸:GPT-4、Gemini等大模型依賴數萬億網頁數據訓練,但大量爬蟲無視網站的robots.txt協議(非法律強制),未經許可抓取內容(如新聞、學術論文、代碼),引發版權爭議(如OpenAI被…

Qwen3簡介:大型語言模型的革命

Qwen3簡介&#xff1a;大型語言模型的革命 Qwen系列語言模型的最新發布——Qwen3&#xff0c;標志著人工智能&#xff08;AI&#xff09;技術的一次重大飛躍。基于前代版本的成功&#xff0c;Qwen3在架構、推理能力和多項先進功能上都取得了顯著提升&#xff0c;正在重新定義大…

MODSIM選型指南:汽車與航空航天企業如何選擇仿真平臺

1. 引言 在競爭激烈的汽車與航空航天領域&#xff0c;仿真技術已成為產品研發不可或缺的環節。通過在設計階段驗證概念并優化性能&#xff0c;仿真平臺能有效縮短開發周期并降低物理樣機制作成本。 MODSIM&#xff08;建模與仿真&#xff09;作為達索系統3DEXPERIENCE平臺的核…

linux 內核 debugfs 使用介紹

一&#xff1a;概述 debugfs 是 Linux 內核提供的一個特殊的虛擬文件系統&#xff0c;用于 暴露內核模塊&#xff08;如驅動&#xff09;內部的調試信息或控制接口&#xff0c;供開發者、調試人員實時查看和排查問題。即 debugfs 就是一個“調試專用的 /proc 或 /sys”&#xf…

ZYNQ筆記(十五):PL讀寫PS DDR(自定義IP核-AXI4接口)

版本&#xff1a;Vivado2020.2&#xff08;Vitis&#xff09; 任務&#xff1a;PL 端自定義一個 AXI4 接口的 IP 核&#xff0c;通過 AXI_HP 接口對 PS 端 DDR3 進行讀寫 測試&#xff0c;讀寫的內存大小是 4K 字節&#xff0c; 目錄 一、介紹 &#xff08;1&#xff09;…

Redis 小記

Redis 命令小記 Redis 是一個文本/二進制數據庫&#xff08;textual/binary database&#xff09; CLI 命令 redis-cli, redis-server, redis-benchmark, redis-check-dump, redis-check-aof redis-cli 執行命令 # 方式 1 redis-cli -h 127.0.0.1 -p 6379 > 127.0.0.1:63…

如何在idea中編寫spark程序

在 IntelliJ IDEA 中編寫 Spark 程序的詳細指南 在大數據處理領域&#xff0c;Apache Spark 憑借其強大的分布式計算能力&#xff0c;成為了眾多開發者的首選工具。而 IntelliJ IDEA 作為一款功能強大的集成開發環境&#xff08;IDE&#xff09;&#xff0c;為編寫 Spark 程序…

各類神經網絡學習:(十一)注意力機制(第3/4集),位置編碼

上一篇下一篇注意力機制&#xff08;2/4集&#xff09;注意力機制&#xff08;4/4集&#xff09; 位置編碼 R N N RNN RNN 和 L S T M LSTM LSTM 這些網絡都是串行執行的&#xff0c;在潛移默化中&#xff0c;就包含了順序關系&#xff0c;也就是詞序關系。而注意力機制是并行…

《Python Web部署應知應會》Flask網站隱藏或改變瀏覽器URL:從Nginx反向代理到URL重寫技術

Flask網站隱藏或改變瀏覽器顯示URL地址的實現方案&#xff1a;從Nginx反向代理到URL重寫技術 引言 在Web應用開發中&#xff0c;URL路徑的安全性往往被忽視&#xff0c;這可能導致網站結構和后端邏輯被攻擊者輕易推斷。對于Flask框架開發的網站&#xff0c;如何隱藏或改變瀏覽…

elementui里的el-tabs的內置樣式修改失效?

1.問題圖 紅框里的是組件的內置樣式&#xff0c;紅框下的是自定義樣式 2.分析 2.1scoped vue模板編譯器在編譯有scoped的stye標簽時&#xff0c;會生成對應的postCSS插件&#xff0c;該插件會給每個scoped標記的style標簽模塊&#xff0c;生成唯一一個對應的 data-v-xxxhash…

大數據測試集群環境部署

Hadoop大數據集群搭建&#xff08;超詳細&#xff09;_hadoop_小飛飛519-GitCode 開源社區 hadoop集群一之虛擬機安裝(mac)_hadoop_皮皮蝦不皮呀-華為開發者空間 hadoop集群二之hadoop安裝_hadoop_皮皮蝦不皮呀-華為開發者空間 虛擬機如何查看gateway | PingCode智庫