力扣 最長遞增子序列

動態規劃,二分查找。

題目

由題,從數組中找一個最長子序列,不難想到,當這個子序列遞增子序列的數越接近時是越容易拉長的。從dp上看,當遍歷到這個數,會從前面的dp選一個最大的數加上當前數,注意這里的dp是每遍歷到一個數都會加進去。而這里的dp數組同樣是用來維護到某個數時的ans,nums數組是做了比較的,因此也有可能內循環時數組中的一些數是沒有做更新的,因此最后一步肯定是加上當前的數后再進行一次與更新的dp比較進行選最大。

時間復雜度:O(n^2),空間復雜度:O(n)。

class Solution {public int lengthOfLIS(int[] nums) {int n = nums.length, ans = 0;int[] f = new int[n];for (int i = 0; i < n; i++) {for (int j = 0; j < i; j++) {if (nums[j] < nums[i]) {f[i] = Math.max(f[i], f[j]);}}f[i]++;ans = Math.max(ans, f[i]);}return ans;}
}

接著是更快的,用二分查找的方法,在用二分時用mid去找目標值。而這里每遍歷到數組的一個數時,同樣可以與tails的數去做比較,注意如果遍歷到的數與dp的數做比較時mid在大的一邊沒有移動過,說明這個數就是大的可以追加到原數組的尾巴,即有位置可以插入。

時間復雜度:O(nlogn),空間復雜度:O(n)。

class Solution {public int lengthOfLIS(int[] nums) {int[] tails = new int[nums.length];int res = 0;for(int num : nums) {int i = 0, j = res-1;//標準二分,當左右指針重疊時再進行一次比較while(i <= j) {int m = (i + j) / 2;if(tails[m] < num) i = m + 1;else j = m - 1;}//這里的i就是目標值tails[i] = num;//更新這個位置的值if(res == i) res++;//說明可以進行擴充//注意每次找到時res肯定會比i多一,因為res從一開始的}return res;}
}

很典型的一道例題,可以用dp的狀態維護,找到前面的狀態,不過每到一個數都要dp兩次。而二分查找目標值的方法,剛好讓比目標值小的存到tails數組,比tails數組大的直接追加,以此來更新最長遞增子序列。

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

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

相關文章

Linux | 進程控制(進程終止與進程等待)

文章目錄 Linux | 進程控制 — 進程終止 & 進程等待1、進程終止進程常見退出方法1.1退出碼基本概念獲取退出碼的方式常見退出碼約定使用場景 1.2 strerror函數 & errno宏1.3 _exit函數1.4_exit和exit的區別1.4.1 所屬頭文件與函數原型1.4.2 執行過程差異**結合現象分析…

Android - Handler使用post之后,Runnable沒有執行

問題&#xff1a;子線程創建的Handler。如果 post 之后&#xff0c;在Handler.removeCallbacks(run)移除了&#xff0c;下次再使用Handler.postDelayed(Runnable)接口或者使用post時&#xff0c;Runnable是沒有執行。導致沒有收到消息。 解決辦法&#xff1a;只有主線程創建的…

魚皮面試鴨30天后端面試營

day1 1. MySQL的索引類型有哪些? MySQL里的索引就像是書的目錄&#xff0c;能幫數據庫快速找到你要的數據。以下是各種索引類型的通俗解釋&#xff1a; 按數據結構分 B樹索引&#xff1a;最常用的一種&#xff0c;數據像在一棵樹上分層存放&#xff0c;能快速定位范圍數據…

【核心算法篇十二】《深入解剖DeepSeek多任務學習:共享表示層的24個設計細節與實戰密碼 》

引言:為什么你的模型總在"精神分裂"? 想象你訓練了一個AI實習生: 早上做文本分類時準確率90%下午做實體識別卻把"蘋果"都識別成水果公司晚上做情感分析突然開始輸出亂碼這就是典型的任務沖突災難——模型像被不同任務"五馬分尸"。DeepSeek通…

DeepSeek應用——與PyCharm的配套使用

目錄 一、配置方法 二、使用方法 三、注意事項 1、插件市場無continue插件 2、無結果返回&#xff0c;且在本地模型報錯 記錄自己學習應用DeepSeek的過程&#xff0c;使用的是自己電腦本地部署的私有化蒸餾模型...... &#xff08;舉一反三&#xff0c;這個不單單是可以用…

2025最新智能優化算法:改進型雪雁算法(Improved Snow Geese Algorithm, ISGA)求解23個經典函數測試集,MATLAB

一、改進型雪雁算法 雪雁算法&#xff08;Snow Geese Algorithm&#xff0c;SGA&#xff09;是2024年提出的一種新型元啟發式算法&#xff0c;其靈感來源于雪雁的遷徙行為&#xff0c;特別是它們在遷徙過程中形成的獨特“人字形”和“直線”飛行模式。該算法通過模擬雪雁的飛行…

vscode通過ssh連接服務器實現免密登錄+刪除

文章目錄 參考&#xff1a; 1、 vscode通過ssh連接服務器實現免密登錄刪除&#xff08;吐血總結&#xff09;

MySQL 主從復制原理及其工作過程

一、MySQL主從復制原理 MySQL 主從復制是一種將數據從一個 MySQL 數據庫服務器&#xff08;主服務器&#xff0c;Master&#xff09;復制到一個或多個 MySQL 數據庫服務器&#xff08;從服務器&#xff0c;Slave&#xff09;的技術。以下簡述其原理&#xff0c;主要包含三個核…

【趙渝強老師】Spark RDD的緩存機制

Spark RDD通過persist方法或cache方法可以將計算結果的緩存&#xff0c;但是并不是這兩個方法被調用時立即緩存&#xff0c;而是觸發后面的action時&#xff0c;該RDD才會被緩存在計算節點的內存中并供后面重用。下面是persist方法或cache方法的函數定義&#xff1a; def pers…

設計模式相關知識點

目錄 設計模式 設計模式 代碼設計原則 設計模式 設計模式 干掉if...else&#xff0c;最好用的3種設計模式&#xff01; | 小傅哥 bugstack 蟲洞棧 代碼設計原則-CSDN博客 23種設計模式-CSDN博客 策略模式&#xff08;Strategy Pattern&#xff09;-CSDN博客 責任鏈模式…

ShenNiusModularity項目源碼學習(9:項目結構)

ShenNiusModularity源碼主要有11個project&#xff08;其實還有officialweb、test兩個文件夾&#xff0c;大致有4、5個project&#xff0c;但看著跟主要項目代碼沒太大關系&#xff0c;暫時不管&#xff09;&#xff0c;這11個project的依賴關系如下圖所示&#xff0c;其中最下…

ubuntu22.4搭建單節點es8.1

下載對應的包 elasticsearch-8.1.1-linux-x86_64.tar.gz 創建es租戶 groupadd elasticsearc useradd elasticsearch -g elasticsearch -p elasticsearch chmod uw /etc/sudoers chmod -R elasticsearch:elasticsearch elasticsearch 修改配置文件 vim /etc/sysctl.conf vm…

Docker 部署 ollama + DeepSeek

拉取并運行 Ollama Docker 鏡像 使用以下命令從 Docker Hub 拉取 Ollama 鏡像并運行容器&#xff1a; docker run -d -p 11434:11434 --name ollama ollama/ollama -d&#xff1a;以守護進程模式運行容器&#xff0c;即讓容器在后臺運行。-p 11434:11434&#xff1a;將容器內…

解決DeepSeek服務器繁忙的有效方法

全球42%的企業遭遇過AI工具服務器過載導致內容生產中斷&#xff08;數據來源&#xff1a;Gartner 2025&#xff09;。當競品在凌晨3點自動發布「智能家居安裝指南」時&#xff0c;你的團隊可能正因DeepSeek服務器繁忙錯失「凈水器保養教程」的流量黃金期?。147SEO智能調度系統…

Discuz! X3.5 根目錄權限設置

在 Discuz! X3.5 中,根目錄的權限設置是確保網站安全性和功能正常運行的關鍵。如果權限設置不當,可能會導致文件無法訪問、安全問題(如文件被篡改)或功能異常。以下是關于 Discuz! X3.5 根目錄權限設置的詳細說明和建議: 1. 根目錄位置 Discuz! X3.5 的根目錄通常是網站的…

【C++八股】內存對?

內存對齊是指編譯器按照特定規則安排數據在內存中的存儲位置&#xff0c;以提高程序的執行效率和可移植性。 內存對齊的原因&#xff1a; 1. 性能優化&#xff1a; 現代處理器通常要求數據在內存中按照特定的邊界對齊&#xff0c;以提高內存訪問效率。 如果數據未對齊&#x…

【有啥問啥】DeepSeek 技術原理詳解

DeepSeek 技術原理詳解 DeepSeek 是一款具有突破性技術的大型語言模型&#xff0c;其背后的技術原理涵蓋了多個方面&#xff0c;以下是對其主要技術原理的詳細介紹&#xff1a; 架構創新 多頭潛在注意力機制&#xff08;MLA&#xff09; 傳送門鏈接: DeepSeek V3中的Multi-…

ML.NET庫學習008:使用ML.NET進行心臟疾病預測模型開發

文章目錄 ML.NET庫學習008&#xff1a;使用ML.NET進行心臟疾病預測模型開發1. 項目主要目的和原理2. 項目概述實現的主要功能&#xff1a;主要流程步驟&#xff1a;關鍵技術&#xff1a; 3. 主要功能和步驟數據加載與路徑處理模型訓練與評估模型保存與加載 4. 代碼中的數據結構…

FFmpeg 全面知識大綱梳理

1. FFmpeg 簡介 FFmpeg 是什么: 一個開源的多媒體處理框架,用于處理音頻、視頻和流媒體。支持多種格式和編解碼器。提供命令行工具和庫(如 libavcodec, libavformat, libavfilter 等)。主要功能: 格式轉換編解碼流媒體處理音視頻剪輯、合并、分離添加濾鏡、特效壓縮與優化…

人工智能基礎之數學基礎:01高等數學基礎

函數 極限 按照一定次數排列的一列數:“&#xff0c;“,…,"…&#xff0c;其中u 叫做通項。 對于數列{Un}如果當n無限增大時&#xff0c;其通項無限接近于一個常數A&#xff0c;則稱該數列以A為極限或稱數列收斂于A&#xff0c;否則稱數列為發散&#xff0c; 極限值 左…