題目:< leetcode > 300. longest increasing subsequence
given an unsorted array of integers, find the length of longest increasing subsequence.
for example,
given [10, 9, 2, 5, 3, 7, 101, 18],
the longest increasing subsequence is [2, 3, 7, 101], therefore the length is 4. note that there may be more than one lis combination, it is only necessary for you to return the length.
your algorithm should run in o(n2) complexity.
求解最長遞增子串行,典型的動態規劃問題。
例如題中給出的例子[10, 9, 2, 5, 3, 7, 101, 18]。
對於10,它是第乙個,所以dp[0]= 1;
對於9,前面沒有比它小的,所以dp[1]=1;
對於2,遍歷前面的10和9,沒有比它小的,所以dp[2]= 1;
對於5,遍歷前面的10,9,2,發現2比它小,所以能和2構成最長上公升子串行,2的最長上公升子串行的長度為1,所以dp[3]= dp[2]+1= 1+1= 2;
對於3,遍歷前面的10,9,2,5,發現2比它小,所以能和2構成最長上公升子串行,2的最長上公升子串行的長度為1,所以dp[4]= dp[2]+1= 1+1= 2;
對於7,遍歷前面10,9,2,5,3,發現2,5,3,比它小,找2,5,3誰的最長上公升子串行長度最長,用最長值加1,dp[5]= max(dp[2]+1, dp[3]+1, dp[4] +1)= 2+1= 3;
對於101,遍歷前面的10,9,2,5,3,7,發現都比它小,找前面的10,9,2,5,3,7誰的最長上公升子串行最長,dp[6]= max(dp[0]+1, dp[1]+1, dp[2]+1, … , dp[5]+1)= 4;
對於18,遍歷前面的10,9,2,5,3,7,101,發現10,9,2,5,3,7比它小,找這幾個元素誰的最長上公升子串行最長,最長值3加1,得到了3+1=4;
class solution
}max = max(max, a[i]); //注意最大的不一定是dp[nums.size()-1],這是乙個坑,還要比較一次
}return max; //所以返回max,而不是dp[nums.size()-1]
}};
第十周作業
1.感觸太多!讓我醍醐灌頂 2.很有教育意義 3.看您的文章真的是享受。觀察問題和思考原因,最後給出解決辦法!每每一針見血。1.公司員工要想長久要給員工提供提公升空間,讓員工替老闆幹,轉變為員工為自己幹。2.學習能力尤為重要,我們要不斷學習提公升自身能力 3.給出清晰 明確的目標,知道自己該幹嘛,知...
第十周作業
本次作業所屬課程 c語言程式設計 本次作業要求 我在這個課程的目標是 學會熟練使用結構型別 本次學習在哪些具體方面幫組我實現目標 自己定義結構還是會方便很多 參考文獻 c primer plus第六版 一 劉未鵬的部落格 怎樣花兩年時間面試乙個人 a 實踐是檢驗真理的唯一標準!能說會道的前提是你要有...
第十周作業
十一周上機作業 cola公司的雇員分為以下若干類 知識點 多型 1 colaemployee 這是所有員工總的父類,屬性 員工的姓名,員工的生日月份。方法 getsalary int month 根據引數月份來確定工資,如果該月員工過生日,則公司會額外獎勵100 元。2 salariedemploy...