抗最大限のアレイを取った後、1005 K回と

抗最大限のアレイを取った後、1005 K回と

 

説明:

整数Aの配列を考えると、我々は次のような方法で、配列を変更することができます。私たちは、インデックスiとAを選択し、[I] -A [i]は、このプロセスは、K回の合計を繰り返しているに置き換えられます。(私たちは、私回以上同じインデックスを選択することができます。)

このように配列を変更した後、可能な最大の配列を返します。

例1:

入力:A = [4,2,3]、K = 1
出力:5
説明:(1)、次いでA [4、2,3]となるインデックスを選択します。
例2:

入力:A = [3、-1,0,2] 、K = 3
出力:6
説明:(1、2、2)インデックスを選択し、Aは、[3,1,0,2]となります。
例3:

入力:A = [2、-3、 -1,5、-4]、K = 2
出力:13
説明:のインデックス(1,4)、およびA [2,3を選択し、-1,5,4 ]。
 

ヒント:

1 <= A.length <= 10000
1 <= K <= 10000
-100 <= A [i]が<= 100

1解決策1:96 MS     8.6 MB
 2  クラスソリューション{
 3。 公共4      int型 largestSumAfterKNegations(ベクトル< INT >&A、int型K){
 5。         / * アイデア:
 6              正とすることができる値の配列、負、k回否定、
 7              、後に、小さな、フロント負、正の大きなアレイをソートする
 8。             1:負の内部アレイ場合
 9              1.1負の数> = Kは、それが負のk回反転させることができ、最終的な合計
 10              1.2もし負の数<K、全てのその後数m負否定、残り時間キロメートル、
 11          1.3再び、発注元の負は正となり、小さくてもよいので、例えば-10、-1、 4,5、
 12                 -1、次に最小となるので、リオーダー
 13は、                同じインデックスiが複数回選択することができるので、その後、最初の非負を動作させます。
14              1.4は、現在の最小値を表す変数の定義ソートされない可能性が
 15を             最初の正非負、次いで合計(キロ)%2 == 0であれば
 16              、次いでIF(キロ)%2 == 1第非負数が合計され、負である
 17。             2:正の整数、倍のランキング、最初非負数kとを合計した場合
 18である         * /   
19          ソート(a.begin()、A .END());
 20は、         int型 CNT = 0 ;
 21は         
22である         ためINT I = 0 ; I <a.size(); Iは++ ){
 23が             IF(CNT == K)BREAK ;
 24              IF(A [I] <0 && CNT < K){
 25                  A [I] = - A [i]は、
26                  CNT ++ ;
27              } {
 28                  ソート(A.begin()、A.end())。
29                  であれば((K-CNT)%2 =!0){ // A [0]最小
30                      A [ 0 ] = - A [ 0 ]。
31                     
32                  }
 33           ブレーク34              }
 35          }
 36          int型の和= 0 37          のためにINT iは= 0 ; I <A.size()は、i ++ ){
 38              の合計+ = A [i]は、
39          }
 40          リターン和。
41      }
 42 }。
1解決策2:     4つの MS     8.7 MB
 2  クラスソリューション{
 3。 公共4      int型 largestSumAfterKNegations(ベクトル< INT >&A、int型K){
 5。         / * アイデア:
 6              正とすることができる値の配列、負、k回否定、
 7              、後に、小さな、フロント負、正の大きなアレイをソートする
 8。             1:負の内部アレイ場合
 9              1.1負の数> = Kは、それが負のk回反転させることができ、最終的な合計
 10              1.2もし負の数<K、全てのその後数m負否定、残り時間キロメートル、
 11          1.3再び、発注元の負は正となり、小さくてもよいので、例えば-10、-1、 4,5、
 12                 -1、次に最小となるので、リオーダー
 13は、                同じインデックスiが複数回選択することができるので、その後、最初の非負を動作させます。
14              1.4は、現在の最小値を表す変数の定義ソートされない可能性が
 15を             最初の正非負、次いで合計(キロ)%2 == 0であれば
 16              、次いでIF(キロ)%2 == 1第非負数が合計され、負である
 17。             2:正の整数、倍のランキング、最初非負数kとを合計した場合
 18である         * /   
19          ソート(a.begin()、A .END());
 20は         int型 = CNT 0 ;
 21は、         intを最小= INT_MAX、ID = 0 ; //を変更する、最小を記録し、添字
22である         ためINT I = 0 ; I <a.size( ); I ++ ){
 23であります             IF(CNT == K)BREAK ;
 24              IF(A [I] < 0 && CNT < K){
 25                  A [I] = - A [I]は、
 26である                  CNT ++ ;
 27                  IF(最小> A [I]){ / / 最小添字更新
28                      分= Aを[I];
 29                      ID = I;
 30                  }
 31である              }  {    // ソート(a.begin()、a.end()); 
32                  IF((K-CNT )%2!= 0){ //なる負及び正の最小値元々最初非負最小値比較
33で                     IF(最小<A [I])A [ID] = - A [ID]; // 最小人を確認するために
34である                     、Aは[I] = - A [I]は、
 35                  }
 36                  BREAK ;
 37              }
 38である         }
 39          のint SUM = 0 ;
 40          INT I = 0 ; I <a.size(); I ++ ){
 41は、              SUM + = A [I ];
 42である         }
 43で         戻りSUM;
 44である     }
 45 }。

 

 

 

 

おすすめ

転載: www.cnblogs.com/NirobertEinteson/p/11992640.html