4

私はこのように見えるかもしれない配列を持っています...

var 配列 = 配列 (1,4,7,8,12,15);

配列内の値は常に整数であり、常に増加するか、以前と同じになる可能性がありますが、少なくとも減少することはありません。

今、私は配列をループして、どの「ステップ」がそれの間で最大の違いを持っ​​ているかを見つけたいので、私の例では、8-12 == 4から配列キー4&5になります...しかし、それも起こるかもしれませんこれは同じ値を持つ複数のステップになります。たとえば、私の配列がこれになるとしましょう..

var 配列 = 配列 (1,5,7,8,12,15);

次に、0&1 と 4&5 になります。

私はこれを返すことができる関数を探しています...ああ、それはPureJでなければなりません...

誰かが私を助けてくれることを願っています。

4

3 に答える 3

2

関数型アプローチでは、単純な純粋関数と組み込みを利用して、いくつかの面倒な作業を行います。

var array = Array(1,5,7,8,12,15);

//get differences:
var diffs=array.map(function(a,b,c){
 return a - (c[b-1]||0);
},{});

//find max diff and collect elements:
var rez=diffs.map(function(a,b){return a==this && [b-1, b]; }, 
                   Math.max.apply(0, diffs)
            ).filter(Boolean);

//display the findings:
alert(rez.join("|")) //shows: 0,1|3,4

作業が完了するといつも驚かされますが、ローカル変数や条件が使用されていません...

于 2013-06-18T15:28:49.897 に答える
1

強引な解決策は、配列を順番に調べて、a[i] から [i+1] までの違いを確認することです。最大値を超える場合は、最大値をこの値に設定します。

配列がソートされているため、バイナリ検索も可能です。

于 2013-06-18T14:58:38.943 に答える