[LeetCode]128. Longest Consecutive Sequence java

    xiaoxiao2021-03-25  120

    /**128. Longest Consecutive Sequence * @param nums * @return */ public int longestConsecutive0(int[] nums) { Arrays.sort(nums); int len = 0; if (nums.length >= 1) { len = 1; } int l = 1; for (int i= 1; i < nums.length; i++) { if (nums[i] - nums[i-1] == 1) { l++; if (l > len) { len = l; } } else if (nums[i] == nums[i-1]){ continue;//continue啊,不能什么也不写 } else { l = 1; } } return len; }

    改进 使用set的唯一性 首先先把所有num值放入HashSet,然后遍历整个数组,如果HashSet中存在该值,就先向下找到边界,找的同时把找到的值一个一个从set中删去,然后再向上找边界,同样要把找到的值都从set中删掉。所以每个元素最多会被遍历两边,时间复杂度为O(n)。

    /**128. Longest Consecutive Sequence * @param nums * @return 数组里连续数字的长度 */ public int longestConsecutive(int[] nums) { if (nums.length <= 1) return nums.length; Set<Integer> set = new HashSet<Integer>(); for (int num: nums) { set.add(num); } int max = 0; for (int num: nums) { int len = 0; if (set.contains(num)) { len++; set.remove(num); for (int n=num+1; set.contains(n); n++) { len++; set.remove(n); } for (int n=num-1; set.contains(n); n--) { len++; set.remove(n); } max = (len>max)? len: max; } } return max; }
    转载请注明原文地址: https://ju.6miu.com/read-4687.html

    最新回复(0)