Ich versuche, dieses Problem auf HackerRank für Stunden zu lösen. Die grundlegende Problembeschreibung lautet wie folgt:1D Array Spiel auf HackerRank
Sie haben ein 1D-Array, das nur aus 0s und 1s besteht. Sie beginnen mit dem 0. Index. Nehmen wir an, die Größe des Arrays sei n. Sie gewinnen, wenn Sie über den Rahmen des Arrays (d. H. Zu einem Index> n-1) hinausreichen können. Aber Sie können nur auf zwei Arten bewegen:
- Gehen Sie einen Schritt vorwärts oder rückwärts.
- Machen Sie einen Sprung von genau 'm' Länge vorwärts.
Sie können aber auch nur STEP auf ein Element mit dem Wert 0 Der Wert bei 0. Index ist bekannt 0 zu sein (so starten Sie eine gültige Position)
‚m‘ vorgesehen ist, wie eine Eingabe und es kann ein beliebiger Wert zwischen 0 und 100 einschließlich sein. Die Array-Größe kann einen Wert zwischen 2 und 100 einschließlich haben.
Das Programm sollte "YES" drucken, wenn ein Gewinn möglich ist. sonst "NEIN".
Ich versuchte es mit einem Backtracking-Algorithmus in Java zu lösen. Aber es wird für die meisten Testfälle abgelehnt.
Bitte helfen Sie mir. Danke im Voraus.
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
int[] array = new int[n];
for(int i=0;i<n;i++){
array[i]=sc.nextInt();
}
if(m<2){
for(int i=0;i<n;i++){
if(array[i] == 1){
System.out.println("NO");
break;
}
}
System.out.println("YES");
}
else{
if(isSolvable(array,0,m,n))
{System.out.println("YES");}
else
{System.out.println("NO");}
}
}
static boolean isSolvable(int[] array,int x,int m,int n){
if(x>n-1){
//System.out.print(x + " ");
return true;
}
if(array[x] == 1) return false;
if(isSolvable(array,x+m,m,n)){
//System.out.print(x + " ");
return true;
}
if(isSolvable(array,x+1,m,n)){
//System.out.print(x + " ");
return true;
}
return false;
}
}
Dieser Testfall, den Sie erklärt haben, hat völlig geholfen. Es war mir überhaupt nicht in den Sinn gekommen. Danke vielmals. Ich habe gerade die Bedingung hinzugefügt, um ein Leerzeichen in meiner Funktion zurückzusetzen, und habe den Wert der Position von 0 auf 1 geändert, um sie als besuchten Ort zu markieren. Das hat den Trick gemacht. –