2016-05-15 7 views
-1

最初の2つのテストケースを通過していますが、タイムアウトエラーが原因で他のすべてのテストケースが失敗しています。私が間違っていることを教えてもらえますか?ここで「タイムアウトのために終了しました」と表示されるのはなぜですか?

リンク -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移動できません:
反復4前進1を移動
前方1または2に移動するので、後方1
イテレーション5移動することはできません:
イテレーション6前方の移動1.: 1または2を前に進めることはできませんので、後ろに1つ移動してください。
。 。 。


また、m 4何であれば入力0 0 0 1 0 1 0 1 0 1 1 1あります。

フォワード1、1、4、を立ち往生。
ただし、4、4、4、になります。あなたはこのコンボを試して戻ってはいけません。

前方に移動しようとする前に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

関連する問題