- 算法
- 1.HashMap保存每个连续序列中以左边界和右边界的值为key,序列长度为value的键值对
- 2.每次遇到新的元素x,检查HashMap中是否存在x-1和x+1的序列以及序列长度left和right;计算x所在的序列长度,并更新x、x-left(序列的左边界)、x+right(序列的右边界)的value为这个长度
- 3.循环的过程中持续更新max
public int longestConsecutive(int[] nums) { HashMap<Integer, Integer> map = new HashMap<>(); int max = 0; for (int x : nums) { if (!map.containsKey(x)) { int left = map.getOrDefault(x - 1, 0); int right = map.getOrDefault(x + 1, 0); int sum = left + right + 1; map.put(x, sum); map.put(x - left, sum); map.put(x + right, sum); max = Math.max(max, sum); } } return max; }
- 算法
- 1.排序数组
- 2.统计连续序列长度:遇到重复元素跳过;遇到不连续元素重置;遇到连续元素加一并更新max
public int longestConsecutive(int[] nums) { if (nums == null || nums.length == 0) { return 0; } Arrays.sort(nums); int max = 1; int continuousLength = 1; for (int i = 1; i < nums.length; i++) { if (nums[i] == nums[i-1] + 1) { continuousLength++; max = Math.max(max, continuousLength); } else if (nums[i] == nums[i-1]) { continue; } else { continuousLength = 1; } } return max; }