私の最初の答えでは、「2つの大きな大きな数を掛ける」というOPの問題に対処しました。結局のところ、この願いは、これから取り組もうとしているより大きな問題のほんの一部にすぎません。
「アルゴリズムの最終的な骨組みにまだ到達していません。これを手伝ってもらえないでしょうか。」
(問題の説明については、質問を参照してください)
私がやろうとしているのは、アムノンが提案したアプローチをもう少し詳しく説明することだけです。
2 の累乗である整数のリストから連続サブリストの最大の積を見つける必要があります。アイデアは次のとおりです。
- すべての連続サブリストの積を計算します。
- これらすべての製品の最大のものを返します。
start
サブリストは、end
インデックスで表すことができます。にはstart=0
n-1 の可能な値end
、つまり 0..n-1 があります。これにより、インデックス 0 で始まるすべてのサブリストが生成されます。次の反復では、start
1 ずつインクリメントしてプロセスを繰り返します (今回は、 の可能な値は n-2 ですend
)。このようにして、可能なすべてのサブリストを生成します。
さて、これらのサブリストのそれぞれについて、その要素の積を計算する必要があります - それはメソッドを考え出すことcomputeProduct(List wholeList, int startIndex, int endIndex)
です. 組み込みBigInteger
クラス (割り当てによって提供される入力を処理できるはずです) を使用して、さらなるトラブルからあなたを救うか、他の人が説明したように、より効率的な乗算方法を実装しようとすることができます。(アルゴリズムが正しく機能するかどうかを確認し、最初に最適化を試みる方が簡単なので、より単純なアプローチから始めます。)
すべてのサブリストを繰り返し処理し、それらの要素の積を計算できるようになったので、最大の積を持つサブリストを決定するのが最も簡単な部分になるはずです。
それでも 2 つのステップを結び付けるのが難しい場合はお知らせください。ただし、問題に取り組んでいるときは、コードのドラフトも提供してください。それをコピー&ペーストします。
編集:アルゴリズムの骨格
public BigInteger listingSublist(BigInteger[] biArray)
{
int start = 0;
int end = biArray.length-1;
BigInteger maximum;
for (int i = start; i <= end; i++)
{
for (int j = i; j <= end; j++)
{
//insert logic to determine the maximum product.
computeProduct(biArray, i, j);
}
}
return maximum;
}
public BigInteger computeProduct(BigInteger[] wholeList, int startIndex,
int endIndex)
{
//insert logic here to return
//wholeList[startIndex].multiply(wholeList[startIndex+1]).mul...(
// wholeList[endIndex]);
}