2013-02-16 4 views
5

の要素の値を検索するには:アルゴリズムは、以下の順序があるシーケンス

101001000100001が...

シーケンスの要素のインデックス を受け取り、返すメソッドを定義する方法

この要素の値(0または1)?

public Element getValue(int index) {} 

はたぶん再帰を使用する必要がありますか?私はどんなアイデアにも感謝しています!

+0

はどのようにあなたの順序を保存するのですか?あなたがそれを知っているなら、その答えはまったく些細なものになるでしょう。多くのデータ構造がインデックス(配列、リスト、文字列)によるアクセスを許可します –

+4

'index + 1'が三角形の数であることを確認します:http://en.wikipedia.org/wiki/Triangular_number – Henrik

答えて

3

リトルドットは、このシリーズが続くことを示しています。あなたの解決策はここにあります:

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

返信1index + 1triangular 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; 
} 

http://ideone.com/8L9A96

関連する問題