の要素の値を検索するには:アルゴリズムは、以下の順序があるシーケンス
101001000100001が...
シーケンスの要素のインデックス を受け取り、返すメソッドを定義する方法
この要素の値(0または1)?
public Element getValue(int index) {}
はたぶん再帰を使用する必要がありますか?私はどんなアイデアにも感謝しています!
の要素の値を検索するには:アルゴリズムは、以下の順序があるシーケンス
101001000100001が...
シーケンスの要素のインデックス を受け取り、返すメソッドを定義する方法
この要素の値(0または1)?
public Element getValue(int index) {}
はたぶん再帰を使用する必要がありますか?私はどんなアイデアにも感謝しています!
リトルドットは、このシリーズが続くことを示しています。あなたの解決策はここにあります:
1つのインデックスを考慮してください。インデックス1、(1 + 2)= 3、(1 + 2 + 3)= 6、(1 + 2 + 3 + 4)= 10などで1が発生することに気づきます。そのn *(n + 1)/ 2。指定されたインデックスのためにそう
(今これはJavaの配列は、インデックス0から始まるように基づく0である)次の操作を行います
index = index + 1; // now it is 1 based index and our formula would fit in nicely.
index = index * 2;
sqroot = integer part of square root of index;
if(sqroot * (sqroot+1) == index)
print 1;
else
print 0;
また、これはO(1)であるとして、再帰の必要がないソリューション(ありません平方根関数の複雑さを考慮して)
返信1
index + 1
がtriangular numberの場合。 xが三角形であるのは、8x + 1が正方形である場合のみです。したがって、index + 1は三角形であり、8 * index + 9が正方形であればifとolyです。
public int getValue(int index) {
int i = (int)Math.round(Math.sqrt(8*index + 9));
if (i*i == 8*index+9)
return 1;
else
return 0;
}
はどのようにあなたの順序を保存するのですか?あなたがそれを知っているなら、その答えはまったく些細なものになるでしょう。多くのデータ構造がインデックス(配列、リスト、文字列)によるアクセスを許可します –
'index + 1'が三角形の数であることを確認します:http://en.wikipedia.org/wiki/Triangular_number – Henrik