vue3源碼中的最長遞增子序列

求解最長遞增子序列是一道經典的算法題,

多數解法是使用動態規劃的思想,算法的時間復雜度是O(n^2);

?而Vue.js內部使用的是維基百科提供的一套“貪心+二分查找”的算法;

貪心算法的時間復雜度是O(n),二分查找的時間復雜度是O(logn),總時間復雜度是O(nlogn)

主要思路:

對數組遍歷,依次求解長度為i時的最長遞增子序列

當i元素大于i-1的元素時,添加i元素并更新最長子序列

否則往前查找直到找到一個比i小的元素,然后插在該元素后面并更新對應的最長遞增子序列

主要目的:

讓遞增序列的差盡可能的小,從而可以獲得更長的遞增子序列,是一種貪心算法的思想

源碼

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><script>function getSequence(arr) {const p = arr.slice();const result = [0]; // 存儲長度為I的遞增子序列的索引let i, j, u, v, c;const len = arr.length;debugger;for (i = 0; i < len; i++) {const arrI = arr[i];if (arrI !== 0) {j = result[result.length - 1];// result存的最后一個值小于當前值if (arr[j] < arrI) {// 存儲在result更新前的最后一個索引的值p[i] = j;result.push(i);continue;}u = 0;v = result.length - 1;// 二分搜索,查找比arrI小的節點,更新result的值while (u < v) {c = (u + v) >> 1;if (arr[result[c]] < arrI) {u = c + 1;} else {v = c;}}if (arrI < arr[result[u]]) {if (u > 0) {p[i] = result[u - 1];}result[u] = i;}}}u = result.length;v = result[u - 1];// 回溯數組p,找到最終的索引while (u-- > 0) {result[u] = v;v = p[v];}return result;}const arr = [2, 1, 5, 3, 6, 4, 8, 9, 7];const resultIndex = getSequence(arr);console.log("最長遞增子序列的索引是:", resultIndex);let result = [];resultIndex.forEach((item, index) => {result.push(arr[item]);});console.log("最長遞增子序列:", result);</script></body>
</html>

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

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

相關文章

認識“數字圖像”

不同領域的人對圖像的概念有著不同的理解。從工程學角度上講&#xff0c;“圖”是物體透射或反射光的分布&#xff1b;“像”是人的視覺系統對圖的接收在大腦中形成的印象或認識。因此&#xff0c;圖像常與光照、視覺等概念聯系在一起&#xff0c;光的強弱、光的波長以及物體的…

Java編程基礎階段筆記 day04 Java基礎語法(下)

? 面向對象編程 筆記Notes 面向對象三條學習主線 面向過程 VS 面向對象 類和對象 創建對象例子 面向對象的內存分析 類的屬性&#xff1a;成員變量 成員變量 VS 局部變量 類的方法 方法的重載 可變個數形參 面向對象&#xff1a;封裝性 訪問權限修飾符 構造方法&…

漢諾塔遞歸算法

起源&#xff1a; 漢諾塔&#xff08;又稱河內塔&#xff09;問題是源于印度一個古老傳說的益智玩具。大梵天創造世界的時候做了三根金剛石柱子&#xff0c;在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子…

Java編程基礎階段筆記 day 07 面向對象編程(上)

? 面向對象編程 筆記Notes 面向對象三條學習主線 面向過程 VS 面向對象 類和對象 創建對象例子 面向對象的內存分析 類的屬性&#xff1a;成員變量 成員變量 VS 局部變量 類的方法 方法的重載 可變個數形參 面向對象&#xff1a;封裝性 訪問權限修飾符 構造方法&…

談“發表(撰寫)學術論文的注意事項”

題記&#xff1a;做兩個核心學術期刊的“數字圖像處理”類審稿專家有一段時間了&#xff0c;在審稿過程中發現存在很多問題&#xff0c;所以在此就撰寫學術論文過程中的一些注意事項&#xff0c;跟大家交流一下&#xff08;當然&#xff0c;文中的很多觀點也是一些資深主編的看…

Vue/Angular中父窗口新開的子窗口關閉的時候刷新父窗口

最近遇到一個項目需求&#xff1a;Angular中父窗口新開的子窗口提交完信息關閉的時候刷新父窗口。 知識點&#xff1a; window.opener 概述 返回打開當前窗口的那個窗口的引用&#xff0c;例如&#xff1a;在window A中打開了window B&#xff0c;B.opener 返回 A. 語法 …

圖像邊緣特征

圖像邊緣是圖像的重要特征&#xff0c;是圖像中特性&#xff08;如像素灰度、紋理等&#xff09;分布的不連續處&#xff0c;圖像周圍特性有階躍變化或屋脊狀變化的那些像素集合。圖像的邊緣部分集中了圖像的大部分信息&#xff0c;一幅圖像的邊緣結構與特點往往是決定圖像特質…

HDU 6631 line symmetric(枚舉)

首先能想到的是至少有一對相鄰點或者中間間隔一個點的點對滿足軸對稱&#xff0c;那么接下來只需要枚舉剩下的點對是否滿足至多移動一個點可以滿足要求。 第一種情況&#xff0c;對于所有點對都滿足要求&#xff0c;那么Yes。 第二種情況&#xff0c;有一個點不滿足要求&#x…

學習數字圖像處理經驗談

一、面向應用&#xff1a;層層分解、抓住要點 我們學習數字圖像處理的最終目的還是應用&#xff0c;不管是用它來研制產品還是研發項目抑或是研究課題&#xff0c;都要用數字圖像處理的理論、方法和技術來解決實際問題。在此過程中&#xff0c;提高效率是非常重要的&#xff0c…

讀javascript百煉成仙笑死筆記一

“自然是這樣的&#xff0c;但是我現在這樣改一下&#xff0c;你說結果是多少呢&#xff1f;”葉小凡詭異地笑了笑&#xff0c;然后打出一段比較奇特的代碼。 var a 1; var b; var sum (b a --a) a-- b; “噗&#xff01;”看到這段代碼&#xff0c;對面弟子差點一口老血…

C#調用存儲過程的通用類

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Data.SqlClient;usingSystem.Collections;usingSystem.Data;//摘要&#xff1a;數據訪問助手。//作者&#xff1a;ZhiQiao//日期&#xff1a;2008/07/02namespaceZhiQiao.DataAccessHelper{ //存…

圖靈獎得主(一)

本文轉自&#xff1a;http://bbs.gxnu.edu.cn/bbsanc.php?path%2Fgroups%2FGROUP_5%2FProgramming%2Fother%2FM.1029997222.A A.M. Turing Award ACMs most prestigious technical award is accompanied by a prize of $25,000. It is given to an individual selected fo…

react-router-dom@6獲取路由傳參

目錄 參數獲取 1、子路由形式攜帶 2、問號(?)形式參數 3、事件跳轉傳參 router/index.tsx import App from "App"; import Home from "pages/Home"; import List from "pages/List"; import Detail from "pages/Detail"; import…

圖靈獎得主(二)

本文轉自&#xff1a;http://bbs.gxnu.edu.cn/bbsanc.php?path%2Fgroups%2FGROUP_5%2FProgramming%2Fother%2FM.1029997222.A 1987年度的圖靈獎授予了IBM沃特森研究中心老資格的研究員 約翰科克(Johncocke)。 科克是從機械到數學、又從數學轉到 計算機方向上來的學者。…

jQuery效果之滑動

jQuery 滑動方法有三種&#xff1a;slideDown()、slideUp()、slideToggle()。 jQuery slideDown() 方法用于向下滑動元素&#xff0c; 語法&#xff1a;$(selector).slideDown(speed,callback); 可選的 speed 參數規定效果的時長。它可以取以下值&#xff1a;"slow"、…

Error: This command has to be run with superuser privileges (under the root user on most systems).

意思是錯誤&#xff1a;此命令必須以超級用戶權限&#xff08;在大多數系統上以root用戶權限&#xff09;運行。所以當前的用戶是普通用戶&#xff0c;需要切換為超級用戶&#xff08;root用戶&#xff09;先輸入在命令行中輸入 su root 然后會出現Password&#xff1a;&#…

圖靈獎得主(三)

本文轉自&#xff1a;本文轉自&#xff1a;http://bbs.gxnu.edu.cn/bbsanc.php?path%2Fgroups%2FGROUP_5%2FProgramming%2Fother%2FM.1029997222.A 繼1979年度圖靈獎首次授予一位加拿大學者K.E.Iverson之后&#xff0c; 1989年度的圖靈 獎又一次授予加拿大學者威廉凱亨(Willia…

對微信公共號的理解

通過redirect_uri獲取code 通過code和appid 獲取access_token 進行鑒權 轉載于:https://www.cnblogs.com/zhouyideboke/p/11309752.html

vue3 v-model變化

概覽 就變化內容而言&#xff0c;此部分屬于高階內容&#xff1a; 非兼容&#xff1a;用于自定義組件時&#xff0c;v-model的 prop 和事件默認名稱已更改&#xff1a; prop&#xff1a;value -> modelValue&#xff1b;event&#xff1a;input -> update:modelValue&a…

圖靈獎得主(四)

本文轉自&#xff1a;本文轉自&#xff1a;本文轉自&#xff1a;http://bbs.gxnu.edu.cn/bbsanc.php?path%2Fgroups%2FGROUP_5%2FProgramming%2Fother%2FM.1029997222.A 1991年度的圖靈獎授予了愛丁堡大學計算機科學系教授羅 賓米爾納(Robin Milner)。米爾納是繼M.V.Wilkes(1…