Vue3 diff的最長遞增子串行 演算法詳解

2022-06-22 00:48:11 字數 1673 閱讀 8225

const arr = [2, 1, 5, 3, 6, 4, 8, 9, 7]

function getsequence (arr)

u = 0 // result陣列第0個元素

v = result.length - 1 // result陣列的最後乙個元素

// 二分搜尋,查詢比 arri 小的節點,更新 result 的值

while (u < v) else

} // 最後的結果是找到u元素

if (arri < arr[result[u]])

result[u] = i}}

}u = result.length

v = result[u - 1]

// 回溯陣列 p,找到最終的索引

while (u-- > 0)

return result // 1 3 5 6 7

}console.log(

// getsequence([5,3,4,0])

getsequence([2, 1, 5, 3, 6, 4, 8, 9, 7])

);/*

。對於我們的例子而言,[2, 1, 5, 3, 6, 4, 8, 9, 7] 的最長子序列是 [1, 3, 4, 8, 9],

而我們求解的 [1, 3 ,5 ,6 ,7] 就是最長子序列中元素在原陣列中的下標所構成的新陣列。

*/// 2, 1, 5, 3, 6, 4, 8, 9, 7

//i//1步 2

//2步 1

//3步 1 5 p[2] =1 result:[1,2]

//4步 1 3 p[3] =1 result:[1,3] 更新index為3這個位置的元素的時候,前乙個比他小的元素index是1

//5步 1 3 6 p[4] =3 result:[1,3,4]

//6步 1 3 4 p[5] =3 result:[1,3,5] 更新index為5這個位置的元素的時候,前乙個比他小的元素index是3

//7步 1 3 4 8 p[6] =5 result:[1,3,5,6] 更新index為6這個位置的元素的時候,前乙個比他小的元素index是5

//8步 1 3 4 8 9 p[7] =6 result:[1,3,5,6,7] 更新index為7這個位置的元素的時候,前乙個比他小的元素index是6

//9步 1 3 4 7 9 p[8] =5 result:[1,3,5,8,7]

// 操作結束後,result中的最後乙個元素一定是最大子串行的最後乙個元素,

// 但是前面的值不一定正確,比如第9步的時候7將8替換掉了,已經不滿足子串行的條件了

// 所以需要陣列p來記錄 陣列p中記錄了第i次操作的時候,這次將要替換的元素的前乙個元素(比它小的那個元素) 的index

// 最後進行乙個回溯的操作

// 從result的最後乙個元素開始,result中最後乙個元素7肯定對應著最大子串行的最後乙個,

// 去p陣列中找,p陣列中對應的這個元素,記錄了更新index為7的時候的前乙個比他小的元素的index

// 向前回溯去找

最長遞增子串

第一類 只需要求長度最長的遞增子串 方法1 時間複雜度 o n 2 include include define maxn 1000 5 using namespace std inta maxn b maxn a i 表示輸入的陣列,b i 表示到字元 i的最長遞增子串 intmain for i...

動態規劃 最長遞增子串行和最長連續遞增子串行

leetcode 674.最長連續遞增序列 題目描述 給定乙個未經排序的整數陣列,找到最長且 連續遞增的子串行,並返回該序列的長度。連續遞增的子串行 可以由兩個下標 l 和 r l r 確定,如果對於每個 l i r,都有 nums i nums i 1 那麼子串行 nums l nums l 1 ...

字母排序(最長遞增子串)

x年突然有外星人造訪,但大家語言不通,不過科學家們經過研究發現外星人用26個英文本母組成的單詞中最長不降子串行的長度來表述數字,且英文本母的排列順序不同,現給出其排列順序,再給出外星人說的每個數字 其實是每個英文單詞,用空格隔開 翻譯出外星人所說的數字 連續輸出,最後加回車 因為是最長不降子串行,所...