2011-10-14 30 views
-5

如何獲取數組,並比較數組中的三個值,而不是多次比較值。比較NlogN中的三個值

我可以迭代三個嵌套循環,但這會導致相同的內部塊被調用三次。我想要NlogN時間。

For Loop 
    For Loop 
     For Loop 
      add values and store if greater than max 
+0

縱觀線「增加值,如果大於MAX存儲」讓我想知道 - 爲什麼不直接對數組進行排序並添加最大的3個值? – mbeckish

+4

你能澄清一下你在這裏試圖完成什麼嗎?比較數組的三個值?對彼此?哪三個值?作爲手術的結果你想要什麼? – DeCaf

+6

你是什麼意思'比較3個值'?你在尋找3個數字的最高總和嗎?只是找到最大的3個,它是O(n) – amit

回答

1

我不知道我很跟隨的問題,但你可能想要的是做這樣的事情:

for i from 1 to N { 
    for j from i+1 to N { 
     for k from j+1 to N { 
      if (i+j+k > currentMax) { 
       // do stuff 
      } 
     } 
    } 
} 
+2

我不知道這是他試圖實現的目標,但它肯定不能滿足複雜性約束條件 – amit

+1

@amit:他的複雜性約束對我來說沒有意義,所以我專注於比較每個三元組的非冗餘方面值。 – PengOne

+0

@PengOne;你的算法似乎是'O(n^3)'。 –