0

非常に単純なはずのアルゴリズムで問題が発生していますが、何らかの理由で頭が適切に機能していません (仕事が多すぎますか?)。

数値の配列があります: [ 10, 20, 30, 40, 100, 1000, 5000, 100000] 配列内の次の「アイテム」を確認したい。

例えば、

  • 数値 10 を指定すると、私のアルゴリズムは 10 を返すはずです。
  • 数値 1 を指定すると、私のアルゴリズムは 10 を返すはずです
  • 数値 50 を指定すると、私のアルゴリズムは 100 を返すはずです。
  • 数値 99999999 を指定すると、私のアルゴリズムは 100000 を返すはずです

疑似コードで私は考えていました:

for previousValue, nextValue in values: 
  if ( previousValue < value && nextValue >= value ):
    return nextValue
return values[max]

誰かが私の疲れ果てた脳に、私が見逃していることを指摘できるなら、それは素晴らしいことです. ありがとう!

4

4 に答える 4

0

In ruby :

find 0,values.length,val
def find left,right,val
    if left == right || left > right then return values[left]
    if val > values[(right + left)/2]
        find (right + left)/2, right, val
    else
        find left, (right + left)/2, val
    end
end
于 2013-10-09T05:53:49.940 に答える
0

配列が既にソートされていると仮定すると、ソリューションは正常に機能します。しかし、より明確にするために、次のように書き直します。

  prev = 0
  for(v in values){
        if(target > prev && target <= v) 
              return v
        prev = v
  }
  return values[values.length-1] 
于 2013-10-09T05:39:43.300 に答える
0

おそらく、この配列をツリーとして表すでしょう。最も近い最大値を見つけるには、キーを見つけるのと同じ方法でツリーを調べ、常に最も近い値を追跡します。ノードの最後に到達すると、最も近い値を返します。

これは、他の回答と比較して、別の選択肢です。このスレッドで確認できます。バイナリ検索ツリーで特定のキー値に最も近い要素を見つける方法は?

于 2013-10-09T08:23:28.263 に答える