最長遞增子串行

2021-10-03 22:40:06 字數 1223 閱讀 2738

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。

示例:輸入: [10,9,2,5,3,7,101,18]

輸出: 4 

解釋: 最長的上公升子串行是 [2,3,7,101],它的長度是 4。

輸入: [1,3,6,7,9,4,10,5,6]

輸出: 6

這一題,我剛開始得思路就是暴力法:

建立乙個陣列,用來記錄它此時所在得最長長度,這個最長長度就是由從前一位開始,向後遍歷,計算最長的長度;如果數值相等就不需要在遍歷了;

很明顯這是乙個o(n^2)的演算法

code:

class solution   

else if(nums[i]==nums[j])

}count[i]=temp;

}return max;

}};

下面給出o(nlgn)的演算法:

它用乙個陣列array來記錄,陣列的索引k表示此時最長長度k+1最小值array[k];

比如:[1,3,6,7,9,4,10,5,6]

則到9時,array是:[0,1,2,3,4]

到10時,array是:[0,1,5,3,4,6]--------------------此時最長長度就是陣列的最長長度

到6時,array是:[0,1,5,7,8,6]

但是,從這個陣列看,它還是每次都和array中的每個元素進行比較,是怎麼體現二分的呢:

就是,每次新來乙個數,對於array來說,它是排好序的,

從而就將array進行二分和這個新來的數進行比較:

i=0;

j=此時array的最大的索引

while(i < j)

//最終肯定得到i==j,此時i就是那個比num小的最接近的那個數

array[i] = num;

code:

class solution 

array[i] = num;

//如果res==j,就說明此時num比目前所有的值都大,那麼最長長度res就加1

if(res == j) res++;

}return res;

}}

這種二分的時間複雜度就為o(nlgn)

最長遞增子串行

這是微軟實習生筆試遇到的,題意 求乙個陣列中最長遞增子串行的長度。要求選擇該題最好演算法的時間複雜度和空間複雜度。答案 時間複雜度o nlgn 空間複雜度o n 這題明顯用動態規劃來解。假設在目標陣列array 的前i個元素中,以array i 元素為最大元素的遞增子串行的長度是lis i 那麼 遞...

最長遞增子串行

最長遞增子串行又叫做最長上公升子串行 子串行,正如lcs一樣,元素不一定要求連續。本節討論實現三種常見方法,主要是練手。題 求乙個一維陣列arr i 中的最長遞增子串行的長度,如在序列1,1,2,3,4,5,6,7中,最長遞增子串行長度為4,可以是1,2,4,6,也可以是 1,2,4,6。方法一 d...

最長遞增子串行

最長遞增子串行 求乙個字串的最長遞增子串行 如 dabdbf最長遞增子串行就是abdf,長度為4 這是一道基本的動態規劃求解的題目,與此類似的還有 最長公共子串行 分析 用一維陣列dp i 來儲存以a i 為末元素的最長遞增子串行的長度,那麼dp i 至少為1 即包含它本身 往前尋找,如果存在a j...