2017-10-01 4 views
2

これはインタビューの質問です。 メソッドへの入力配列が昇順または降順であるかどうかを調べます。ネクタイは現在の注文と一緒に行きます。私は、他のメンバーが増えていて、それらのメンバーのうちのいくつかが等しいか、それと同等であることを意味し、減少する要素についても同じことが当てはまります。この関数はtrueまたはfalseを返します。Javaの単調増加配列の検索

私はこのようにしました。私は彼らがそれを行うために別のしかし創造的な方法だと思っています。

boolean isMonotonic(int[] arr){ 
    if(arr.length <= 2){ 
     return true; 
    } 
    boolean increasing = true; 
    boolean decreasing = true; 
    for(int i=1;i<arr.length;i++){ 
     if(arr[i-1] > arr[i]){ 
      increasing = false; 
     }else if(arr[i-1] < arr[i]){ 
      decreasing = false; 
     } 
     if(!increasing && !decreasing){ 
      return false; 
     } 
    } 
    return true; 
} 
+2

あなたのソリューションはきれいで、アレイを1回だけ通過するだけで、より洗練された方法でmucbを行うことができるかどうかはわかりません。増加するhaaが減少に転じるというフレーズの別の方法は、前の動きと前の動きとの動きを追跡することです。 –

答えて

3

あなたのソリューションは、非常に優れた、高速かつ効率的です。

重要なのは、配列を1回だけループすることです。そのため、複雑さは線形であるため、O(n)です。これ以上の効率的な解決方法はありません。

ええ、もっと多くの行を保存したり読みやすくするために、Javaが提供するコレクションを使用できますが、なぜですか?個人的には、この問題に対するきれいなソリューションを提供したと思います。スマートで簡単で効率的なソリューションをリファクタリングする理由はありません。 :)