지금 Hackerrank에서 문제를 해결하고 있으며 논리가 다소 정확하다고 믿지만 큰 데이터 세트는 성능이 저하되어 "잘못된"답변을 얻습니다. 당신이 그것을 확인할 수 있도록 여기에 문제에 대한 링크는 다음과 같습니다큰 배열을 조작 할 때 성능을 향상시키는 방법은 무엇입니까?
https://www.hackerrank.com/challenges/qheap1
내가 큰 데이터 세트를 허용하기 위해이 스크립트의 성능을 향상하는 방법을 궁금해하고있다. 나는 스캐너와 관련이 있다는 직감이 있지만 그 이유는 모르겠다.
public class Solution {
private static final int ADD = 1;
private static final int DELETE = 2;
private static final int GET = 3;
private static final int TICK = 1;
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner in = new Scanner(System.in);
PrintStream out = System.out;
int n = in.nextInt();
int[] heap = new int[n];
int a = 0;
while (a < n) {
a = 0;
int q = in.nextInt();
switch(q) {
case(ADD):
int nextAdd = in.nextInt();
/*out.println("ADD " + next);*/
int b = 0;
while (b < n) {
/*out.println(heap[b]);*/
if (heap[b] == 0) {
heap[b] = nextAdd+TICK;
/*printArray(heap);*/
b = n-1;
}
b++;
}
/*printArray(heap);*/
break;
case(DELETE):
int c = 0;
int nextDelete = in.nextInt();
while (c < n) {
if (heap[c]-TICK == nextDelete) {
heap[c] = 0;
c = n-1;
}
c++;
}
/*printArray(heap);*/
break;
case(GET):
Arrays.sort(heap);
int d = 0;
while (d < n) {
if (heap[d] != 0) {
out.println(heap[d]-TICK);
d = n-1;
}
d++;
}
/*printArray(heap);*/
break;
}
a++;
/*printArray(heap);*/
}
}
public static void printArray(int[] ar) {
String str = "";
for (int i : ar) {
str += i + " ";
}
System.out.println(str);
}
}
힌트 : "작업"코드는 일반적으로 codereview.stackexchange.com – GhostCat
로 전환 될 수 있습니다 여기에
모든 테스트를 통과 구현 당신이 ** 가독성을 작업 할 수 있습니다 ** 먼저. 나는 당신의 코드가 무엇을하는지 계산하는 데 정말로 힘든 시간을 보냈다. 예를 들어, 스위치 케이스를 개별 메소드 (메소드 및 변수에 대한 올바른 이름 포함)로 푸시하는 경우 유용합니다. 코드를 보는 것에서 그러한 성능을 해결하는 것은 어렵습니다 **. 그 코드가 읽기 어려운 방식으로 쓰여지는 경우 쉽게 이해할 수 없습니다. – GhostCat당신의 alghoritm이 단지 2 차적인 복잡성을 가지기 때문에, 즉 모든 반복에서 'a'에 의해 모든 힙을 가로 지르기 때문에, 힘들게됩니다. 의미는''a'' 반복을 할 것이고, 각각'n' 반복을 할 것입니다 ('b','c'' 또는'd'를 통해'd'에 대해 더 많이 할 것입니다 - 'n * logn'). @Lashane이 제안한 목적에 맞는 올바른 데이터 구조를 구현하면 향상 될 수 있습니다. 'PriorityQueue'의 소스 코드를 살펴보십시오 - 배열을 기반으로 만들어졌지만 요소의 특별한 순서를 적용하므로 요소의 큰 부분을 건너 뛰고 속도를 높일 수 있습니다. – bashnesnos