Codeforces Round#322(Div.2) - B O(n)但仍然加班

时间:2015-10-09 17:29:28

标签: java algorithm

问题: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));


}

1 个答案:

答案 0 :(得分:0)

您的代码不是O(n); +上的String是O(n),您的代码是O(n ^ 2)。您需要改为使用StringBuilder

此外,在开头而不是结尾插入通常也很糟糕,所以即使StringBuilder也不会让你有效地做到这一点。

你需要弄清楚如何以相反的方式建立答案。