최대 길이 연속수열 질문
192
15 asked
정답의 경우 아래와 같이 되어있습니다.
public int solution(int[] nums){
int answer = 0;
HashSet<Integer> set = new HashSet<>();
for(int x : nums) set.add(x);
for(int x : set){
if(set.contains(x - 1)) continue;
int cnt = 0;
while(set.contains(x)){
cnt++;
x++;
}
answer = Math.max(answer, cnt);
}
return answer;
}제가 푼 방식 : set으로 중복되지 않은수만 우선순위 큐(pQ)에 넣어 계산.
물론 풀이에서의 코드가 간결하고 사용하는 자료형도 적으니 좋은 코드같습니다만은 이렇게 풀었을때 시간 복잡도 면에서도 많이 불리한지 피드백 부탁드립니다.
public int solution(int[] nums){
int answer = 1 , cnt=1;
PriorityQueue<Integer> pQ= new PriorityQueue<>();
HashSet<Integer> set = new HashSet<>();
for(int i : nums){
if(!set.contains(i)) pQ.offer(i);//
set.add(i);
}
int N = pQ.poll();
while ( !pQ.isEmpty() ){
int nextN = pQ.poll();
if( N+1 == nextN ){
cnt++;
N = nextN;
}
else if( N+1 != nextN ) {
cnt = 1;
N = nextN;
}
answer=Math.max(answer,cnt);
}
return answer;
}
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다.
제시하신 코드의 시간 복잡도에 대해 피드백 드리겠습니다.
기존 해법에서는 HashSet을 사용하여 각 원소가 존재하는지 확인하는 과정에서 O(1)의 시간 복잡도를 가집니다. 그리고 모든 원소에 대해 한 번씩만 확인하기 때문에 전체 시간 복잡도는 주어진 배열의 크기인 N에 대하여 O(N)이 됩니다.
반면, 우선순위 큐(PriorityQueue)를 사용한 귀하의 접근 방식에서는, 우선 PriorityQueue에 원소를 추가하는 과정에서 N개의 원소 각각에 대해 O(log N)의 시간이 소요됩니다. 따라서 전체적으로 N개의 원소를 큐에 추가하는 데 O(NlogN)의 시간이 소요됩니다. 추가적으로, PriorityQueue에서 원소를 추출하면서 최대 길이 연속 수열을 구하는 과정은 O(NlogN) 안에 완료됩니다.
결론적으로, 우선순위 큐를 사용한 귀하의 방식은 기존 해법에 비해 시간 복잡도 면에서 불리합니다. 기존 해법은 O(N)에 처리가 가능한 반면, 귀하의 방식은 O(NlogN)에 처리되기 때문입니다. 따라서 대량의 데이터를 처리할 경우, 우선순위 큐를 사용한 방식보다는 HashSet만을 사용한 방식이 효율적일 수 있습니다.
비밀번호
0
65
1
과일 가져가기 이러한 경우에는 반례가 생기지 않나요?
0
161
2
cpu 스케줄링
0
105
2
외부 문제 질문
0
122
2
가장 많이 사용된 회의실
0
117
2
심사위원 문제 시간복잡도 질문
0
127
1
현관문 출입순서
0
96
1
미로의 최단거리 통로
0
74
1
집으로 이동 문제 코드
0
124
1
채점 사이트 개설
0
161
2
송아지를 잡자
1
110
1
다익스트라 + 환승횟수
0
135
2
문제풀이 해설 질문입니다.
0
124
2
"이동 횟수" 문제가 변형된다면?
0
155
2
예제 3번의 정답이 이해가 되지 않아요 선생님 ㅜㅜ
0
248
1
"비밀번호" 문제 확인 부탁드립니다!
0
170
1
잃어버린 강아지 문제 count 관련 질문있습니다
0
202
1
바둑대회 질문입니당
0
221
1
5. "최대 길이 바이토닉 수열" 에서 설명해주신 방법과 제가 직접 구현한 방법이 달라, 확인 한번 부탁드립니다
0
310
1
알파코드 풀이질문입니다
0
216
1
7번 비밀 번호 문제에 시간복잡도가 궁금합니다!
0
162
1
혹시 이렇게 작성해도 괜찮나요?
0
284
2
문제풀이 확인 부탁드립니다.
0
244
1
혼자서 푼 문제 확인 부탁드립니다.
0
298
1

