Java Algorithm 최대 길이 연속수열

song yuheon·2023년 11월 17일
0

Java Algorithm

목록 보기
14/18
post-thumbnail

문제


주어진 수열 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}));
	}
}

결과



profile
backend_Devloper

0개의 댓글