import java.util.HashSet; public class LongestConsecutive { //1.暴力法 public int longestConsecutive1(int[] nums) { //定义一个变量,保存当前最长连续序列的长度 int maxLength = 0; //遍历数组,以每个元素作为起始点,寻找连续序列 for (int i = 0; i <nums.length ; i++) { //保存当前元素作为起始点 int currNum = nums[i]; //保存当前连续序列长度 int currLength = 1; //寻找后续数字,组成连续序列 while (contains(nums,currNum+1)){ currLength++; currNum++; } //判断当前连续序列长度与最大值比较 maxLength = currLength>maxLength?currLength:maxLength; } return maxLength; } //定义一个方法,用于寻找数组中某个元素 public static boolean contains(int[] nums,int x){ for (int num:nums) { if(num==x){ return true; } } return false; } //方法二:利用hashmap存储数组 public int longestConsecutive2(int[] nums) { //定义一个变量,保存当前最长连续序列的长度 int maxLength = 0; //定义一个hashset,保存所有出现的数值 HashSet<Integer> hashSet = new HashSet<>(); //1.遍历所有元素 保存到hashset内 for(int num:nums){ hashSet.add(num); } //2.遍历数组,以每个元素作为起始点,寻找连续序列 for (int i = 0; i <nums.length ; i++) { //保存当前元素作为起始点 int currNum = nums[i]; //保存当前连续序列长度 int currLength = 1; //寻找后续数字,组成连续序列 while (hashSet.contains(currNum+1)){ currLength++; currNum++; } //判断当前连续序列长度与最大值比较 maxLength = currLength>maxLength?currLength:maxLength; } return maxLength; } //方法三:利用hashmap存储数组改进 public int longestConsecutive(int[] nums) { //定义一个变量,保存当前最长连续序列的长度 int maxLength = 0; //定义一个hashset,保存所有出现的数值 HashSet<Integer> hashSet = new HashSet<>(); //1.遍历所有元素 保存到hashset内 for(int num:nums){ hashSet.add(num); } //2.遍历数组,以每个元素作为起始点,寻找连续序列 for (int i = 0; i <nums.length ; i++) { //保存当前元素作为起始点 int currNum = nums[i]; //保存当前连续序列长度 int currLength = 1; //追加一个条件,判断:只有当前前驱不存在的情况下,才去进行寻找连续序列操作 if(!hashSet.contains(currNum-1)){ //寻找后续数字,组成连续序列 while (hashSet.contains(currNum+1)){ currLength++; currNum++; } //判断当前连续序列长度与最大值比较 maxLength = currLength>maxLength?currLength:maxLength; } } return maxLength; } public static void main(String[] args) { LongestConsecutive longestConsecutive = new LongestConsecutive(); int[] nums = {100,4,200,1,3,2}; System.out.println(longestConsecutive.longestConsecutive(nums)); } }