java爬蟲(七)使用node.js獲取network中api介面內的資訊
阿新 • • 發佈:2020-12-30
技術標籤:LeetCode--difficult
給定一個未排序的整數陣列nums
,找出數字連續的最長序列(不要求序列元素在原陣列中連續)的長度。
進階:你可以設計並實現時間複雜度為O(n)
的解決方案嗎?
示例 1:
輸入:nums = [100,4,200,1,3,2]
輸出:4
解釋:最長數字連續序列是 [1, 2, 3, 4]。它的長度為 4。
示例 2:
輸入:nums = [0,3,7,2,5,8,4,6,0,1] 輸出:9
提示:
0 <= nums.length <= 104
-109<= nums[i] <= 109
程式碼實現:
class Solution { public int longestConsecutive(int[] nums) { if(nums == null || nums.length == 0){ return 0; } int len = nums.length; Map<Integer,Integer> map = new HashMap<>(len); int result = 1; for(int i = 0;i<len;i++){ int cur = nums[i]; // 某元素已經出現過則跳過不用統計 if(!map.containsKey(cur)){ int leftLen = map.getOrDefault(cur-1,0); int rightLen = map.getOrDefault(cur+1,0); int curLen = leftLen + 1 + rightLen; if(curLen > result){ result = curLen; } // 放入雜湊表中,用來給後面的元素判斷它們的值是否在前面出現過 map.put(cur,-1); // 左右端點記錄當前最長連續序列值即可,區間之間的元素不用記錄,因為它們已經出現過並統計過了 map.put(cur - leftLen,curLen); map.put(cur + rightLen,curLen); } } return result; } }