2017-06-26 9 views
-2

私は就職インタビューを受けて、 で練習するための質問をいくつか教えてくれました: 配列が降順か昇順かをチェックし、昇順でソートされていない場合は上のいずれも表示されません。配列が降順または昇順になっています

これは私が書いたものですが、それは働いていない:

for (i = 0; i < myArrey2.length; i++) { 
    if (myArrey2[i] > myArrey2[i + 1]) { 
     alert ("Ascending"); 
    } else if(myArrey2[i] < myArrey2[i + 1]){ 
     alert ("Descending"); 
    }else { 
     alert("not sorrted"); 
    } 
    break; 
} 

を誰かが私はこの1つを聖霊降臨祭のお手伝いができますか? 助けてくれてありがとう。

+0

?エラーを出力していますか?あなたは正しい結果を得ていませんか? – PrestonM

+0

配列全体ではなく、隣接する要素をチェックしているだけです。 – Barmar

+0

繰り返しごとに何かを警告してはいけません。 – Bergi

答えて

0

配列の最初の2つの要素の順序を確認してください。その後、配列の残りの部分を調べて、同じ順序であるかどうかを確認します。

var order; 
if (a[0] > a[1]) { // first two are descending 
    order = "Descending"; 
    for (var i = 1; i < a.length-1; i++) { 
     if (a[i] <= a[i+1]) { 
      order = "Not ordered"; 
      break; 
     } 
    } 
} else { 
    order = "Ascending"; 
    for (var i = 1; i < a.length-1; i++) { 
     if (a[i] > a[i+1]) { 
      order = "Not ordered"; 
      break; 
     } 
    } 
} 
console.log(order); 

これは、すべての数値が異なることを前提としています。それらが等しい場合、最初の不等対が見つかるまで、配列の先頭にある一連の等しい要素をスキップする必要があります。

配列全体について何かを判断しようとするときに覚えておくべき重要なことは、ループの終わりに達するまで、それが本当であることを知ることができないことです。だから、ループのたびに昇順または降順であることを報告することはできません - あなたが知っていることは、これらの2つの要素が昇順または降順であることだけですが、残りの配列についてはまだ決まっていません。一方、条件がfalseになるとすぐに、ループから抜け出すことができます。配列の残りの部分をチェックする必要はありません。

+0

ありがとう私を助けてくれました。 @バーマールありがとう –

0

最初に、1つのアイテムから次のアイテムへの変更の配列を作成するために、2番目のエレメントから最後までの配列をループします。次に、すべての項目がまったく同じである(すべての変更が0に等しい)かどうかを確認します。そうでない場合は、配列が昇順にソートされているかどうかを確認します(すべての変更が0以上です)。そうでない場合、配列が降順でソートされているかどうかを確認します(すべての変更が0以下です)。最後に、配列がこれらの3つのカテゴリのいずれにも該当しない場合、配列は順序付けされていません。

function order(arr) { 
    const deltas = []; 

    for(let i = 1; i < arr.length; i++) { 
    deltas.push(arr[i] - arr[i - 1]); 
    } 

    if(deltas.every(change => change === 0)) { 
    return 'Both ascending and descending as every element is exactly the same.'; 
    } else if(deltas.every(change => change >= 0)) { 
    return 'Ascending'; 
    } else if(deltas.every(change => change <= 0)) { 
    return 'Descending'; 
    } 

    return 'None'; 
}; 
+0

これは大変ありがとうございます、それはとても役に立ちます –

0

次のようにします。

戻り値は次のように解釈する必要があります。それが動作していないどのように

[ true, true ] // ascending orderly 
[ false, true ] // descending orderly 
[ _,  false ] // not sorted 

function check([x1, x2,...xs], s = [true, true]){ 
 
    return xs.length ? [x1 < x2, s[1] && check([x2,...xs], [x1 < x2, (x1 < x2 && s[0]) === x1 < x2])[1]] 
 
        : [x1 < x2, s[0] === x1 < x2]; 
 
} 
 

 
var as = [1,2,3,4,5,6], 
 
    bs = [6,5,4,3,2,1], 
 
    cs = [6,5,3,4,2,1]; 
 
    
 
console.log(check(as)); 
 
console.log(check(bs)); 
 
console.log(check(cs));

関連する問題