问题:http://codeforces.com/contest/581/problem/B
我的代码是O(n),我将我的代码与其他代码进行了比较,无法理解为什么我的代码超出了测试用例6中的时间限制(n = 100,000)?有什么想法吗?
private void solve() throws IOException {
//String s = nextToken();
int n = nextInt();
int[] array = new int[n];
for (int i = 0; i < n; i++) {
array[i] = nextInt();
}
int max = -1;
String ans = "";
for (int i = array.length-1; i >=0; i--) {
if (array[i] >= max) {
max = array[i];
ans = 0 + " " + ans;
}
else {
ans = ( max - array[i] +1) + " " + ans ;
}
}
writer.println(ans.substring(0,ans.length()-1));
}
答案 0 :(得分:0)
您的代码不是O(n); +
上的String
是O(n),您的代码是O(n ^ 2)。您需要改为使用StringBuilder
。
此外,在开头而不是结尾插入通常也很糟糕,所以即使StringBuilder
也不会让你有效地做到这一点。
你需要弄清楚如何以相反的方式建立答案。