给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)
常规思路: 先排个序,去重数据,然后有序数组求连续的数字的最长即可
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class Main { public static Scanner sc = new Scanner(System.in); public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); public static void main(String[] args) throws Exception { int n = sc.nextInt(); int[] arr = new int[n]; for(int i=0;i<n;i++){ arr[i] = sc.nextInt(); } // 排序,有重复数字可以剔除掉 Arrays.sort(arr); int[] arrUniq = new int[n]; arrUniq[0] = arr[0]; int arrUniqIndex = 0; for(int i=1;i<n;i++){ if(arr[i] != arrUniq[arrUniqIndex]){ arrUniq[++arrUniqIndex] = arr[i]; }else { continue; } } // 遍历一遍求解即可 int ans = 1; int curCnt = 1; int lastVal = arrUniq[0]; for(int i=1;i<=arrUniqIndex;i++){ if(arrUniq[i] == lastVal + 1){ curCnt ++; lastVal ++; ans = Math.max(ans, curCnt); }else { lastVal = arrUniq[i]; curCnt = 1; } } System.out.println(ans); } } /* 6 100 4 200 1 3 2 4 3 1 1 1 1 时间复杂度O(nlogn),空间复杂度O(n) 8 100 4 200 1 3 2 200 4 */