LC 416パーティション均等サブセット合計

タイトル

アレイは、両方のサブセット内の要素の総和が等しくなるように2つのサブセットに分割することができる場合にのみ正の整数を含む非空の配列を指定し、見つけます。

注意:

  1. アレイ素子の各々は、100を超えません。
  2. アレイのサイズは、200を超えません。

例1:

入力:[1、5、11、5] 
出力:真の
説明:配列のように分割することができる[1、5,5]及び[11]。

例2:

入力:[1、2、3、5] 
出力:偽
説明:配列が等しい和サブセットに分割することができません。

回答

1  クラスソリューション{
 2  公共3      BOOL canPartition(ベクトル< INT >&NUMS){
 4          int型 SUM =累算(nums.begin()、nums.end()、0); // 第1の加算アレイ
5。         IF( &SUM 1){ // 配列が奇数の場合、それが保持していない、なぜなら例えば:. 3 5 + 2 = 
6。             復帰 はfalse ;
 7          }
 。8          INTハーフ= SUM / 2 ;
 9          STD ::並べ替え(nums.begin()、NUMS .END()、グレーターSTD :: < 整数 >()); //そうでない場合は超過回数制限時間、添加しなければならない
10          の戻り FOO(NUMS、半分、0); //は入力の半分であろう
。11      }
 12である 
13である     BOOLの FOO(ベクトル< INT > NUMSと、INT半分、int型のインデックス){
 14          のためにINTインデックス= I; Iは++){; Iはnums.size()< // あらゆる数の反復
15              INT H =半- NUMS [I]; // 半分差し引く
16を             IF(H < 0リターン 偽にする; 
 17。             IF(Hの== 0戻り trueに18である             // 上記の条件が満たされない場合、NUMSを説明[I]、番号を探し続ける必要次に、条件を満たすことができない
20 //すなわち指数= I + 1。真満たしていること、それはトップへの復帰を満たしていない場合、この層内の数字は、探しています。
19 IF(FOO(NUMS、H、私は+ 1。)== trueに戻り trueに20である } 21で 返す falseに22である } 23です }。

 

おすすめ

転載: www.cnblogs.com/kykai/p/11568399.html