//给定一个未排序的整数数组 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 <= 10⁵ // -10⁹ <= nums[i] <= 10⁹ // // // Related Topics 并查集 数组 哈希表 👍 1960 👎 0 import java.util.HashSet; import java.util.Set; //leetcode submit region begin(Prohibit modification and deletion) class Solution128 { // 采用hash表,时间复杂度O(n) public int longestConsecutive(int[] nums) { Set<Integer> num_set = new HashSet<Integer>(); for (int num : nums) { num_set.add(num); } int longestStreak = 0; for (int num : num_set) { if (!num_set.contains(num - 1)) { int currentNum = num; int currentStreak = 1; while (num_set.contains(currentNum + 1)) { currentNum += 1; currentStreak += 1; } longestStreak = Math.max(longestStreak, currentStreak); } } return longestStreak; } public static void main(String[] args) { System.out.println(new Solution128().longestConsecutive(new int[]{100, 4, 200, 1,2,3, 2})); } } //leetcode submit region end(Prohibit modification and deletion)
【算法】Hash 算法-关注优化细节
最新推荐文章于 2024-07-22 17:06:26 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)