2010-12-10 7 views
0

私の問題を実行するための高速な方法を検索します。間隔の開始値に従う番号のないストレートで番号を取得します。

1から8の数字の座席を想像すると、彼らは座席[2、6、5、3]の人であると想像してください。この配列を持つ

[2、5、8、7、1]私は例のために

人座席番号4(開始値)後に、第2の(+2間隔)バック取得したいです、iが値で開始し、私は+2回、リスト内 三次数が5であり、第二は、で、移動してこの値

を返さなければならない方法と同じ[ 2,5,8,7,1]、私はから開始し、私は+3時間 ここで最小値に戻らなければなりません。 trought 8 .. 1 .. 2 ..、結果:を有する2

[1,3]で3

をもたらし、+2カウント、開始[5]、[3,9]

をもたらし、 +1カウント、開始10

[5、3、9]、私は誰かが私の問題を理解することを願っています

を引き起こす、を数え、開始。 ありがとう

+2

ステップに、例えば、入力のより詳細な説明を与えることをしてみてください実行される出力例を示します。 –

+1

私は本当にあなたの例に従うことができませんでした。 [1、3]が4を始めると言うとき、4を始めるとどういう意味ですか? –

答えて

4

あなたのリストを並べ替えるには、開始インデックスを見つけるためにbisectを使い、リストの長さで加算の結果を修正してください。

+5

あなたはこの質問を理解してうれしいです。 :-D –

+0

1から8までの数字の座席を想像してみましょう。彼らは座席[2,6,5,3]の人々だと想像してください。私は座席番号4(開始値)の後に2番目の(+2)人を戻したいと思います。 – Dalou

+0

@Dalou:私のアルゴリズムではどうしたらいいですか? –

0

だから、これは基本的にPythonでイグナシオのアルゴリズムの単なる実装例です:

from bisect import bisect 

def circular_highest(lst, start, move): 
    slst = sorted(lst) 
    return slst[(bisect(slst, start) - 1 + move) % len(lst)] 

print circular_highest([2, 5, 8, 7, 1], 3, 2) 
print circular_highest([2, 5, 8, 7, 1], 7, 3) 
print circular_highest([1, 3], 4, 2) 
print circular_highest([5, 3, 9], 3, 1) 
print circular_highest([5, 3, 9], 3, 2) 

出力:

7 
2 
3 
5 
9 
関連する問題