LeetCode演算法題-Longest Continuous Increasing Subsequence(Java實現)
這是悅樂書的第286 次更新,第303 篇原創
01 看題和準備
今天介紹的是LeetCode演算法題中Easy級別的第154題(順位題號是674)。給定未排序的整數陣列,找到最長連續增加子序列的長度。例如:
輸入:[1,3,5,4,7]
輸出:3
說明:最長的連續增加子序列為[1,3,5],其長度為3,即使[1,3,5,7]也是一個增加的子序列,它不是一個連續的,其中5和7被4分開。
輸入:[2,2,2,2,2]
輸出:1
說明:最長連續增加子序列為[2],其長度為1。
注意:陣列長度不超過10,000。
本次解題使用的開發工具是eclipse,jdk使用的版本是1.8,環境是win7 64位系統,使用Java語言編寫和測試。
02 第一種解法
要想找最長的連續遞增子陣列,肯定是要遍歷陣列。首先要處理下特殊情況,如果陣列為null或者沒有任何元素,直接返回0。接著定義一個最大值的臨時變數,開始迴圈遍歷陣列元素,如果有連續的遞增子陣列,就一直在另一個迴圈中處理,如果不滿足就跳出迴圈,任何判斷最大值,最後返回最大值。
public int findLengthOfLCIS(int[] nums) { if (nums == null || nums.length < 1) { return 0; } int max = 1; for (int i=0; i<nums.length; i++) { int count = 1; while (i+1 < nums.length && nums[i] < nums[i+1]) { count++; i++; } max = Math.max(count, max); } return max; }
03 第二種解法
還可以對第一種解法再優化下,內部不再使用迴圈,直接判斷最大值,如果不滿足遞增的條件,就將count重置為1。
public int findLengthOfLCIS(int[] nums) { if (nums == null || nums.length < 1) { return 0; } int max = 0; int count = 0; for (int i=0; i<nums.length; i++) { if (i == 0 || nums[i] > nums[i-1]) { count++; max = Math.max(max, count); } else { count = 1; } } return max; }
04 小結
演算法專題目前已日更超過四個月 ,演算法題文章154 +篇,公眾號對話方塊回覆【資料結構與演算法 】、【演算法 】、【資料結構 】中的任一關鍵詞,獲取系列文章合集。
以上就是全部內容,如果大家有什麼好的解法思路、建議或者其他問題,可以下方留言交流,點贊、留言、轉發就是對我最大的回報和支援!