[Leedcode][JAVA][第128题][最长连续序列][Hash]
生活随笔
收集整理的這篇文章主要介紹了
[Leedcode][JAVA][第128题][最长连续序列][Hash]
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【問題描述】[困難]
給定一個未排序的整數(shù)數(shù)組,找出最長連續(xù)序列的長度。要求算法的時間復(fù)雜度為 O(n)。示例:輸入: [100, 4, 200, 1, 3, 2] 輸出: 4 解釋: 最長連續(xù)序列是 [1, 2, 3, 4]。它的長度為 4。【解答思路】
1. Sort+Compare
-
先排序,題意要求連續(xù)序列,即可以比較nums[i]與 nums[i - 1],如果不相等,表示是遞增的趨勢,相等則反之,遞增后需要判斷是否連續(xù),即相鄰的元素差值是否為1
-
下面的代碼處理邊界casecase 如[-1,0][?1,0],不會比較max與cur的值,需要在最后一道防線攔截一次
時間復(fù)雜度:O(NlogN) 空間復(fù)雜度:O(1)
public int longestConsecutive(int[] nums) {if (nums == null || nums.length == 0) return 0;Arrays.sort(nums);int n = nums.length;int max = 1, cur = 1;for (int i = 1; i < n; i++) {if (nums[i] != nums[i - 1]) {if (nums[i - 1] + 1 == nums[i]) cur++;else {max = Math.max(max, cur);cur = 1;}}}return Math.max(max, cur);}2. Hash
時間復(fù)雜度:O(N) 空間復(fù)雜度:O(1)
【總結(jié)】
1.極小過渡到最大,最大過渡到極小
2.暴力優(yōu)化到最佳結(jié)果
轉(zhuǎn)載鏈接:https://leetcode-cn.com/problems/longest-consecutive-sequence/solution/dong-tai-gui-hua-jie-zui-chang-zi-xu-lie-zi-chua-5/
總結(jié)
以上是生活随笔為你收集整理的[Leedcode][JAVA][第128题][最长连续序列][Hash]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2D人脸识别之Camera篇
- 下一篇: [Leedcode][JAVA][第28