生成されたリストがあります:
1. 003
2. 012
3. 021
4. 030
5. 102
6. 111
7. 120
8. 201
9. 210
10. 300
(数字は 0 から 3 までで、それらの合計は 3 です)
それらを数えずに組み合わせがどの場所にあるかを見つける方法は?? 元。201 -> index=8 よろしくお願いします。
そうです、私が行ってきた質問の下のコメントは、検索を実行せずに、現在の値からインデックスに直接移動したいと考えていることを前提としています。つまり、エントリの数字を調べて、それを 1 から始まる数字に変換します。
この回答は方向性があり不完全であることに注意してください。問題にアプローチする方法を示しているだけです。
あなたの例を見ると、各エントリを 3 桁(z_i, y_i, x_i)で構成されるものとして扱うと、次のシーケンスが得られます。
最大桁数がk (=3) の場合、次のようになります。
x_i = 3, 2, 1, 0, 2, 1, 0, 1, 0, 0 = k, k-1, ..., 0, k-1, ... 0, ......, 0
y_i = 0, 1, 2, 3, 0, 1, 2, 0, 1, 0 = 0, 1, ..., k, 0, ..., k-1, ......, 0
z_i = 0, 0, 0, 0, 1, 1, 1, 2, 2, 3 = k+1 x 0, k x 1, ......., 1 x k
ご覧のとおり、y_iの数字は順番に繰り返し上昇し、各補完の最後にz_iをノックアップします。
桁数が多い場合、パターンはより複雑になりますが、同様のパターンに従います。
k=4の場合:
エントリの合計は、最初または最後の列から見ることができk+1
ますk=4
。の場合k=3
、それは単に の三角形ですk+1
。
うまくいきませんでしたが、そのパターンは、桁数が増えるにつれて連続した合計を示している可能性があります。
まだパターンがあります:
k=3
:
k=4
:
k=5
:
または、一般に、長さkのシーケンス内のエントリの総数:
この知識は、最初の桁のスカラーを見つけるのに役立ち、残りの問題は実質的に のサブ問題ですk-1
。現時点で私を倒す...
を使用しCollections.binarySearch
ます。
http://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#binarySearch(java.util.List , T) を確認してください