1. 程式人生 > >LeetCode最長連續序列問題

LeetCode最長連續序列問題

LeetCode-128.最長連續序列


)

最長連續序列

給定一個未排序的整數陣列,找出最長連續序列的長度。

要求演算法的時間複雜度為 O(n)。

示例:

輸入: [100, 4, 200, 1, 3, 2]
輸出: 4
解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度為 4。

分析

在拿到陣列時首先應該去重,再進行排序,最後統計最長序列;

由於我使用的是Java語言,去重我首選的是set集合,逐個存入再取出,需要注意的是因為考慮到陣列長度改變,所以需要建立一個新的陣列(int[] arrs=new int[set.size()])儲存從set集合中取出的去完重的數;

拿到新陣列後,使用Arrays.sort(arrs);進行排序;

最後進行最長序列的統計:
首先需要排除空陣列的情況,遇空直接return 0;
需要注意哪怕陣列中只有一個數,最長序列也是1,所以最長序列統計應該從1開始:int longest=1;//用來記錄最長序列
需要一個計數器:int count=1;來計數,知道序列斷了才開始從新計數,從新計數前應該將count與longest進行比較,始longest始終保持最大的數值。
程式碼片.

class Solution {
    public int longestConsecutive(int[] nums) {
        if
(nums.length==0){ //排除空陣列 return 0; }else{ //去重 Set<Integer> set=new HashSet<>(); for (int num : nums) { set.add(num); } int[] arrs=new int[set.size()]; int k=0;//計數 for
(Integer integer : set) { arrs[k]=integer; k++; } Arrays.sort(arrs); int longest=1; int count=1; int value=arrs[0]; for(int i=1;i<arrs.length;i++){ if(value+1==arrs[i]){ count++; }else{ if(count>longest){ longest=count; } count=1; } if(count>longest){ longest=count; } value=arrs[i]; } return longest; } } }

作者:LiuK版權所有轉載需註明出處