2016-05-15 64 views
-1

我正在通過前兩個測試用例,但由於超時錯誤,所有其他測試用例都失敗了。你能告訴我我做錯了什麼嗎?爲什麼我在這裏「因超時而終止」?

鏈接 -https://www.hackerrank.com/challenges/java-1d-array

我的代碼:

import java.io.*; 
import java.util.*; 
import java.text.*; 
import java.math.*; 
import java.util.regex.*; 

public class Solution { 

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 scan = new Scanner(System.in); 
    int T,n,m; 
    int[] A = new int[5000]; 
    int a = 0; 
    int flag=1; 
    T = scan.nextInt(); 
    if((T>=1)&&(T<=5000)) 
    { 
     while(T!=0) 
     { 
     n = scan.nextInt(); 
     m = scan.nextInt(); 
     if(((n>=2)&&(n<=100))&&((m>=0)&&(m<=100))) 
     { 
     for(int i=0;i<n;i++) 
     { 
      A[i]=scan.nextInt(); 
     } 
     for(int i=n;i<n+m;i++) 
     { 
      A[i]=0; 
     } 
     while((a>=0)&&(a<n)&&(flag==1)) 
     { 
      if(A[a+1]==0) 
      { 
       a+=1; 
      } 
      else if(A[a+m]==0) 
      { 
       a+=m; 
      } 
      else if(A[a+m-1]==0) 
      { 
      a-=1; 
      } 
      else 
      { 
       flag=0; 
      } 
     } 
     if(a>=n) 
     { 
      System.out.println("YES"); 
     } 
     else if(flag==0||a<0) 
     { 
      System.out.println("NO"); 
      flag=1; 
     } 
     T--; 
     a=0; 
     } 
     } 
    } 
} 
} 
+0

因爲它需要太長時間? – Andreas

+0

「由於超時而終止」僅表示您的代碼未在HackerRank的分配執行時間內完成。 – shmosel

+0

嘿!謝謝!我知道錯誤意味着什麼,但我該如何解決它?請幫忙。我正在學習現在調試代碼。就像之前的用戶所建議的那樣。 – Swaggerboy

回答

0

首先,你的測試if(A[a+m-1]==0)是錯誤的。它應該是if(A[a-1]==0)


您的代碼將進入無限循環。

比方說m是2,輸入是0 0 1 1

迭代1:向前移動1.
迭代2:無法前進1或2,所以向後移動1.
迭代3:向前移動1.
迭代4:無法前進1或2,所以向後移動1.
迭代5:向前移動1.
迭代6:無法向前移動1或2,因此向後移動1.
。 。 。


而且,如果m是4和輸入0 0 0 1 0 1 0 1 0 1 1 1什麼。

轉發1,1,4,0​​,卡住
然而,4,4,4,贏得。你不會回頭嘗試這個組合。

如果您在嘗試向前移動1之前嘗試向前移動m,它將無濟於事。

仍然m是4並且輸入是0 0 0 1 0 1 0 1 1 1

轉發4,卡住
然而,1,1,4,4,贏得。你不會回頭嘗試這個組合。

您的邏輯需要回溯,使用遞歸。

+0

好吧。非常感謝我對這些錯誤的簡潔解釋。我會記住這些,並嘗試新的邏輯。 :0同時,即時學習調試代碼以及​​:)謝謝你! – Swaggerboy

+0

@Swaggerboy記住點擊對號接受的答案(如果你不接受的話,那是),以便其他人可以看到的問題已回答讓您滿意。 – Andreas

+0

是的,只要我提交代碼,我會盡快完成:)謝謝:) – Swaggerboy