n個の数値の配列が与えられている場合、指定された範囲、つまりi番目のインデックスからj番目のインデックスまで、その配列のサブセット(インデックスに基づく0)をどのように計算できますか?私はビットマスキングを使ってみましたが、範囲のためにこれを解決する方法を理解できませんでした。与えられた範囲内の配列の部分集合を計算する?
例えば、配列aがa = [2 6 9 1 7]であり、与えられた範囲が1から3の場合、答えは= [6]、[9]、[1]、[6 9 ]、[6 1]、[9 1]、[6 9 1]
ここでは配列のすべてのサブセットを計算する関数があり、その範囲の制約をどのように使用するかはわかりません。
private static void findSubsets(int array[])
{
int numOfSubsets = 1 << array.length;
for(int i = 0; i < numOfSubsets; i++)
{
int pos = array.length - 1;
int bitmask = i;
System.out.print("{");
while(bitmask > 0)
{
if((bitmask & 1) == 1)
System.out.print(array[pos]+",");
bitmask >>= 1;
pos--;
}
System.out.print("}");
}
}
なぜサブアレイを作成しないのですか? –
それほど効率が悪いですか? @willywonka_dailyblah – ashwani
またはオフセットを使用して、配列のそのセグメントにコードを制限するために適切に 'array.length'を変更してください。 –