46.配列内で最長の連続サブシーケンス
タイトル説明
順序付けられていない配列arrが与えられた場合、最長の連続シーケンスの長さを返します(連続値が必要であり、位置は不連続になる可能性があります。たとえば、3、4、5、および6は連続自然数です)
入る
[100,4,200,1,3,2]
戻り値
4
入る
[1,1,1]
戻り値
1
分析
1.質問の意味から取得でき、繰り返し要素はカウントされないため、Setメソッドを採用して重複を自動的に削除します
2.次に、比較を続けます。セットに現在の要素+ 1の後に要素が含まれている場合は、カウンター++を指定します。
3.完全なセットがトラバースされるまで、最長の連続サブシーケンスを取得できます
コード
import java.util.*;
public class Solution {
/**
* max increasing subsequence
* @param arr int整型一维数组 the array
* @return int整型
*/
public int MLS(int[] arr) {
if (arr.length == 0) {
return 0;
}
int n = arr.length;
int max = 1;
Set<Integer> set = new HashSet<>();
for (int num : arr) {
set.add(num);
}
for (int num : arr) {
if (set.contains(num - 1)) {
continue;
}
int start = num;
while (set.contains(start + 1)) {
start++;
}
max = Math.max(max, start - num + 1);
}
return max;
}
}