奇数サイズの配列が与えられます。配列から任意の要素を削除し、残りの偶数サイズの配列を同じサイズの2つの集合に分割し、それらの要素の合計が同じであるかどうかを調べる必要があります。配列から任意の要素を削除することは必須です。配列から任意の1つの要素を削除した後に、奇数サイズの配列を同じサイズと同じ合計の2つの等しいセットに分割します。
-2
A
答えて
0
ここでは、配列から1要素を削除する必要があると仮定しています。
以下のコードスニペットをご覧ください。
ここint solve(int idx, int s, int cntr, int val) {
if(idx == n)
if(cntr != 1)
return INT_MAX;
else
return abs((sum-val)-2*s);
int ans = INT_MAX;
if(cntr == 0)
ans = min(ans, solve(idx+1, s, cntr+1, arr[idx]));
else
ans = min(ans, min(solve(idx+1,s+arr[idx], cntr, val), solve(idx+1, s, cntr, val)));
return ans;
}
sum
val
は任意の値をアレイから除去されているか否かを追跡するために uが削除したい任意の位置にある要素の値、及びcntr
であり、元の配列の合計であります。
だから、アルゴはこのようになります。
忘れてしまった値を削除してください。そして、問題は、配列を2等分半分に分割することが可能かどうかです。ここでは、配列を2つに分割してabs(sum-2*sum_of_any_half_part)
を最小化するなど、この問題を考えることができます。だからこの考えで私は最初にバケツs
を持っていて、私たちが心配している配列の一部であると言います。したがって、各ステップで、この要素に要素を配置するか、または他の要素に配置することができます。
ここで、この問題に削除部分を導入すると、そのわずかな変更が必要になります。今度は2つではなく各ステップで3つのオプションがあります。
- この特定の要素を削除して、アレイ内のそのインデックスの要素の値に1から
cntr
とval
を増加させます。 - この要素で何もしないでください。これは、この要素を別のバケット/ハーフに入れることに等しいです。
- バケット
s
にこの要素を入れます。つまり、sの値をarr[idx]
で増やします。
ここで、最良の結果が得られるかどうかを再帰的に確認します。
P.S.コードスニペットの基本ケースを見て、より良いアイデアを得てください。
最後に上記のsolve
関数がans = 0を返すなら、それはyesを意味します。要素を削除した後、配列を2等分部分に分割することができます。
これが役に立ちます。与えられた問題では
関連する問題
- 1. 同じサイズの2つのデータフレームを1列ずつ結合します。
- 2. 配列を同じサイズのウィンドウに分割する
- 3. R:同じサイズの2つの配列をマージする
- 4. 同じ要素の値を持つ配列を結合し、
- 5. 配列から要素のセットを削除すると、私は配列から最後の2つの要素を削除しようとしているC++
- 6. サイズ2の配列 - 要素の1つが空の場合、それを他と等しく設定します
- 7. 2つの配列要素を結合するか、または1つの配列要素を別の配列要素に分配しますか?
- 8. 別の配列アルゴリズムから1つの配列要素を削除します
- 9. 要素が同じテキストを持っている場合、2つの要素の1つを削除します。
- 10. 配列を同じ要素の小さな配列に分割する
- 11. mongodbの配列から最後の2つの要素を削除します
- 12. 2つの配列の要素の同一の合計
- 13. 2つの配列から同じインデックスを持つゼロ要素を削除する
- 14. Javaで - 2つが同じ場合に配列の要素を合計する必要があります
- 15. 配列操作(特定のグループで1つの列を合計し、他の列を同じに保ちます)
- 16. 2つの要素の合計が特定の数に等しい2つのソートされた配列
- 17. 配列の合計要素に同じキー?
- 18. 同じテーブルの2つのインデックス(列名?)を1つに結合しますか?
- 19. 配列要素の参照同じ配列の別の要素
- 20. 変数と等しいループ配列セット要素の場合
- 21. 要素の合計が等しいか近い要素の配列から2つの部分配列を見つけよう
- 22. 同じサイズの2つのint配列を取得し、両方の合計である配列を返すメソッドを作成します。
- 23. 2つの配列が同じ要素を持っているかどうかを確認する方法と、同じ要素が配列の1つから削除されている場合はどうすればいいですか?
- 24. 同じ名前を持つオブジェクトの配列から要素を統合する
- 25. 1つの配列に同じ要素が別の配列で含まれているかどうか
- 26. 同じPHP関数から2つの異なる配列を返します
- 27. 2つの配列を同じ方法でランダム化します。
- 28. C++で任意の要素をポップした後、自動的に配列のサイズを変更します
- 29. 2つの配列の同じインデックスを持つ要素の製品
- 30. 同じサブキーの配列のマージ/削除
のいずれかの要素を削除する必要があります。私は、要素を削除せずに2等分の半分に配列を分けることができたらどうしますか?それを解決策と考えるか? – Roshan
また、配列のサイズや配列の要素の最大値などの問題の完全な制約を与えてください。 – Roshan
@Roshanこの質問はTechgigのサイトからのもので、配列のサイズは100000まででした。そのため、サブセットサム問題で解決するのは、O(n * sum)時間の複雑さがあるためコストがかかるようでした。 –