1. 程式人生 > 實用技巧 >java爬蟲(七)使用node.js獲取network中api介面內的資訊

java爬蟲(七)使用node.js獲取network中api介面內的資訊

技術標籤: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;
    }
}