2013-06-18 57 views
3

我有一個陣列,其可能看起來像這樣...發現排序後的數組之間的最大差值

變種陣列=陣列(1,4,7,8,12,15);

數組中的值將永遠是整數,始終會漲,也可以是一樣的前面,但至少不會變得更小。

現在我想循環遍歷數組,找出哪個「步驟」有最大的區別,所以在我的例子中,這將是數組鍵4 & 5因爲從8-12 == 4 ...但它也可能發生,這將是具有相同值的多個步驟,讓我們說我的數組應該是這樣..

VAR陣列=陣列(1,5,7,8,12,15);

那麼這將是0 & 1和4 & 5 ....

我正在尋找能回我這一個功能...哦,它必須是PureJs ...

我希望有人能幫助我。

回答

3

我不知道你想要什麼。但是如果你想最大的跳躍:

var max=0; 
for (i=1; i<array.length; i++) 
    max = Math.max(max,array[i]-array[i-1]); 

如果你想在第一位置,在發生這個偉大的跳躍:

var max=0; 
var firstLoc=0; 
for (i=1; i<array.length; i++) 
{ 
    curJump = array[i]-array[i-1]; 
    if (curJump > max) 
    { 
     firstLoc = i; 
     max = curJump; 
    } 
} 

如果你想在最後位置在發生這一跳:

var max=0; 
var lastLoc=0; 
for (i=1; i<array.length; i++) 
{ 
    curJump = array[i]-array[i-1]; 
    if (curJump >= max) 
    { 
     lastLoc = i; 
     max = curJump; 
    } 
} 

如果您想要發生此最大跳躍的所有位置的數組:

var max=0; 
var locs = []; 
for (i=1; i<array.length; i++) 
{ 
    curJump = array[i]-array[i-1]; 
    if (curJump == max) 
    { 
     locs.push(i); 
    } else if (curJump > max) 
    { 
     locs = [i]; 
     max = curJump; 
    } 
} 
+0

偉大的答案和很好的解釋!謝謝!對不起,我只能給一個正確的答案,而你的只是簡單的:) –

+0

謝謝!不過,我不得不說,我的解決方案與Ayman的解決方案非常相似,儘管我不確定二進制搜索位。 – galdre

1

蠻力溶液是去在序列陣列通和看到從[I]的差至第[i + 1]。如果它大於最大值,則將最大值設置爲該值。因爲數組進行排序

二進制搜索也是可能的。

+0

是的,我已經想到這一點爲好,謝謝你,雖然,但我寧願更高貴/動態方法,如果有的話 –

+0

你可以看一下當前和最後一個元素,並把它作爲一個線索何時停止。所以,如果你已經找到了一個說100的差距,你在元素3或30,最後一個元素小於[最後] - 一個[當前],那麼你知道你可以停止。 – Ayman

+0

二進制搜索怎麼可能,跳轉不一定按排序順序? – Deep

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 

我總是驚訝,當我做,我看不出有任何本地變量或條件語句使用...

+0

哇多麼美麗,美麗!即使你的說法也是對的,我只能給一張支票,但我愛你的解決方案! –

相關問題