我一直在努力解決Hackerrank的熱身挑戰。對於這個特殊的挑戰 - https://www.hackerrank.com/challenges/cut-the-sticks - 我寫了一些代碼,儘管對我來說這在邏輯上看來是正確的,但我沒有得到正確的答案。切棍棒:黑客熱身挑戰
我的代碼 -
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int lengths[] = new int[n];
List<Integer> output = new LinkedList<Integer>();
for (int i = 0; i < n; i++)
lengths[i] = sc.nextInt();
sc.close();
Arrays.sort(lengths);
for (int i = 0; i < n; i++) {
if (lengths[i] == 0)
continue;
else {
output.add(n - i);
for (int j = i; j < n; j++) { // This loop isn't working like it should
lengths[j] -= lengths[i];
// System.out.print(lengths[j] + " "); // For debugging purposes
}
// System.out.println("");
}
}
for (int i = 0; i < output.size(); i++)
System.out.println(output.get(i));
}
}
對於下面的輸入 -
6
5 4 4 2 8 2
我得到的輸出 -
6
5
4
3
2
1
正確的輸出應該是 -
6
4
2
1
我試圖在整個的用於標記中的代碼(具有評論)循環的運行顯示長度數組的值,這是我所得到的對於相同的輸入如上 -
0 2 4 4 5 8
0 4 4 5 8
0 4 5 8
0 5 8
0 8
0
6
5
4
3
2
1
我完全被難住爲什麼會發生這種情況。
使用你的調試器,逐行執行代碼,檢查每一步的變量。 – 2014-10-03 06:31:11
你的整個邏輯就是簡單地將循環計數器減1加到列表中,然後將其打印出來。這是你想要做的嗎? – 2014-10-03 06:33:40
我今天剛做了這個問題。但是我不明白你用'output.add(n - i);'來做什麼。也就像@ScaryWombat所說的。在我的代碼中,我確實有一個靜態的'ArrayList'和一個'count'變量[在main()']的for循環中。在執行減法之後,在else塊內部,我遞增計數變量,並且在'for'循環的每次迭代中,我將'count'變量添加到ArrayList。休息是一樣的。 – 2015-03-31 09:04:21