주어진 수열 nums에서 만들 수 있는 가장 긴 연속된 수열의 길이를 구하는 프로그램을 작성합니다. 연속된 수열이란, 각 숫자가 1씩 증가하는 수열을 의미합니다.
예시: nums = [8, 1, 9, 3, 10, 2, 4, 0, 2, 3]의 경우, 가장 긴 연속된 수열은 [0, 1, 2, 3, 4]이며, 이 수열의 길이는 5입니다.
제한사항:
nums의 길이는 최대 300,000입니다.
nums의 각 원소 값은 -1,000,000,000에서 1,000,000,000 사이이며, 중복된 값이 존재할 수 있습니다.
이 문제를 해결하기 위해서는 각 숫자가 몇 번 나타나는지 파악하고, 연속되는 숫자들을 찾아 그 길이를 계산하는 로직을 구현해야 합니다. 연속된 수열을 찾을 때 중복된 숫자는 무시됩니다.
package inflearn_231117;
import java.util.*;
import java.util.stream.Collectors;
class Solution2 {
public int solution(int[] nums){
Set<Integer> setNum = new HashSet<>();
for(int i=0;i<nums.length;i++)
setNum.add(nums[i]);
List<Integer> listNum = new ArrayList<>();
for(int a : setNum) {
listNum.add(a);
}
listNum.sort((n1,n2)->n1-n2);
// listNum.forEach(System.out::print);
int maxCount =0,count=1;
for(int i=0;i<listNum.size()-1;i++) {
if(listNum.get(i)==listNum.get(i+1)-1) {
count++;
}
else {
if(maxCount<count)
maxCount=count;
count=1;
}
}
if(maxCount<count)
maxCount=count;
// listNum.forEach(System.out::print);
// setNum.forEach(System.out::print);
// System.out.println();
return maxCount;
}
public static void main(String[] args){
Solution2 T = new Solution2();
System.out.println(T.solution(new int[]{8, 1, 9, 3, 10, 2, 4, 0, 2, 3}));
System.out.println(T.solution(new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0}));
System.out.println(T.solution(new int[]{3, 3, 3, 3, 3, 3, 3, 3}));
System.out.println(T.solution(new int[]{-3, -1, -2, 0, 3, 3, 5, 6, 2, 2, 1, 1}));
System.out.println(T.solution(new int[]{-5, -3, -1, -4, 3, 3, 5, 6, 2, 2, 1, 1, 7}));
}
}