2017-09-20 13 views
-5

私はHackerRankのアルゴリズム問題のリストを作成しています。このループでタイムアウトエラーが発生していて、速度を上げる方法があるのだろうかと疑問に思っていましたか?いくつかの予備的なグーグルはあまり上がらなかった。Javaでwhileループを最適化する

コンテキストの編集:問題には2つのカンガルーがあり、それぞれに開始位置(k1、k2)と移動速度(v1、v2)があります。彼らは同時に同じ場所に着陸するかどうかを判断する必要があります。

static String kangaroo(int k1, int v1, int k2, int v2) { 
    int diff = Math.abs(k1 - k2); 
    int newDiff = 0; 
    String output = ""; 

    while (true){ 
     k1 += v1; 
     k2 += v2; 
     newDiff = Math.abs(k1 - k2);  
     if (k1 == k2){ 
      output = "YES"; 
      break; 
     } 
     else if (newDiff > diff){ 
      output = "NO"; 
      break; 
     } 
    } 
    return output; 
} 
+2

この問題ではループを使用する必要はありません。 :P –

+7

コードが何をするかわからない、HackerRankの問題を知らない – Tyler

+2

while(true)=問題を尋ねる –

答えて

0

あなたのコードは、(O(n))かなり速いですが、それはただの整数である2線の交点の条件に基づいているので、この問題は、一定の時間(O(1))で解決することができます。

static String kangaroo(int k1, int v1, int k2, int v2) { 
    float x = (k2 - k1)/(v1 - v2); 
    if(x == (int) x) { //check if the intersection point is an integer 
     return "YES"; 
    } 
    return "NO"; 
}