日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Leedcode][JAVA][第128题][最长连续序列][Hash]

發(fā)布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [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)

public int longestConsecutive(int[] nums) {Set<Integer> set = new HashSet<>();for (int num : nums) set.add(num);int max = 0;for (int num : nums) {if (!set.contains(num - 1)) {//判斷set不包含當(dāng)前元素-1的值,跳過已經(jīng)計算的最長遞增序列int curNum = num;int curCnt = 1;while (set.contains(curNum + 1)) {curNum += 1;curCnt += 1;}max = Math.max(max,curCnt);}}return max;}

【總結(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。