LeetCode最長連續序列問題
阿新 • • 發佈:2018-12-02
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版權所有轉載需註明出處