貪欲アルゴリズム: K回の反転後の配列の合計を最大化する

貪欲アルゴリズム: K回の反転後の配列の合計を最大化する

[[355496]]

多くのレコーディング仲間が、昨日のトピック「貪欲アルゴリズム:ジャンピングゲーム II」は難しいと報告しています。これでほっとしました。笑。ちょうど貪欲を説明していたとき、何人かのレコーディング仲間が「貪欲を別途説明する必要はなく、動作ルールを直接説明すればいい」と提案してくれたからです。多くの学生は、それは単なる欲張りで、難しいことではないと感じるかもしれません。貪欲の原理は単純ですが、問題の解決方法は非常に巧妙で、難易度はルールとそれほど変わらないことがわかります。

今日は簡単な質問です。鍵となるのは、貪欲な問題解決の考え方を養うことです。

K 回の否定後の配列の合計を最大化し、問題のアドレス: https://leetcode-cn.com/problems/maximize-sum-of-array-after-k-negations/

整数の配列 A が与えられた場合、配列を変更する方法は次のとおりです。インデックス i を選択し、A[i] を -A[i] に置き換え、このプロセスを合計 K 回繰り返します。 (同じインデックス i を複数回選択できます。)

このように配列を変更すると、配列の最大可能合計が返されます。

例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.長さ <= 10000
  • 1 <= K <= 10000
  • -100 <= A[i] <= 100

アイデア

この質問のアイデアは、実は非常に簡単に考えることができます。配列の合計を最大化するにはどうすればよいでしょうか?

貪欲な思考、局所最適性: 絶対値の大きい負の数を正の数に変換し、現在の値を最大化します。全体的な最適性: 配列全体の合計が最大に達します。

局所最適は全体最適につながる可能性があります。

したがって、すべての負の数を正の数に変換しても、K は依然として 0 より大きくなります。このときの問題は、正の整数の順序付けられたシーケンスであることです。正の数と負の数を K 回変換して、配列の合計を最大化する方法。

次に、別の貪欲なソリューションがあります。ローカル最適ソリューション: 反転する最小の正の整数のみを見つけて、現在の値が最大値に達するようにします (たとえば、正の整数配列 {5, 3, 1} では、1 を反転して -1 を取得することは、5 を反転して -5 を取得するよりもはるかに大きくなります)。グローバル最適ソリューション: 配列全体の合計が最大値に達します。

この問題を解くときに貪欲アルゴリズムについて考えないかもしれませんが、AC を 1 回で取得できます。

「実は、私は見落とされがちな貪欲な思考をお見せするためにここにいます。こんなに単純な問題に、貪欲な思考を 2 回も使いました!」

この問題を解決するための手順は次のとおりです。

  • ステップ 1: 配列を絶対値に従って最大から最小の順に並べ替えます。「絶対値に従って並べ替える必要があることに注意してください」
  • ステップ2: 前から後ろへ移動し、負の数に遭遇したら正の数に変換し、K--
  • ステップ3: Kがまだ0より大きい場合は、Kが使い果たされるまで、最小値を持つ要素を繰り返し変換します。
  • ステップ4: 合計

対応する C++ コードは次のとおりです。

  1. クラスソリューション{
  2. 静的ブールcmp( int a, int b) {
  3. 戻る 絶対値(a) >絶対値(b)
  4. }
  5. 公共
  6. int largestSumAfterKNegations(ベクトル< int >& A, int K) {
  7. sort( A.begin (), A.end ( ), cmp); // 最初のステップ
  8. for ( int i = 0; i < A.size ( ); i++) { // ステップ2
  9. もし (A[i] < 0 && K > 0) {
  10. A[i] * = -1;
  11. K --;  
  12. }
  13. }
  14. while (K --) A[A.size() - 1] *= -1; // ステップ3  
  15. int結果 = 0;
  16. for ( int a : A) result += a; // ステップ4
  17. 結果を返します
  18. }
  19. };

要約する

貪欲問題が単純化されると、人々は疑問を抱き始めます。「これはこのように行われるべきではないのか?これもアルゴリズムなのか?これは貪欲ではないと思う。」

この問題は実は非常に単純で、貪欲アルゴリズムを知らない人でも解くことができますが、ここでは貪欲アプローチを使用して全体を通して説明します。

欲深い考えは必ず存在するからです!

「貪欲な考え方(局所最適、大域最適)を持っていなければ、感情に基づいて単純な貪欲な質問をするという罠に陥りやすく、難しい貪欲な質問がまったくできなくなります。実際、これでは貪欲な考え方が訓練されません。」

したがって、たとえそれが貪欲な単純な質問だとわかっていても、それを解くには貪欲な思考に頼らなければなりません。これは問題解決の感覚を養うのに非常に役立ちます。

この記事はWeChatの公開アカウント「Code Thoughts」から転載したもので、以下のQRコードからフォローできます。この記事を転載する場合は、Code Thoughts の公開アカウントにご連絡ください。

<<:  AIチップと人工知能産業は密接に連携している

>>:  AIと機械理解の限界を打ち破り、オックスフォード大学のコンピューターサイエンス博士の143ページの論文は3Dオブジェクトの再構築とセグメント化を学ぶ

ブログ    
ブログ    
ブログ    
ブログ    
ブログ    

推薦する

ガートナーの2020年人工知能技術ハイプサイクルを通して新たな変化を見る

ガートナーの最近の調査によると、企業の47%が流行の発生以来人工知能(AI)への投資を維持しており、...

人工知能を背景とした公共読書空間の探究と創造

5Gネットワ​​ークの発展と人工知能アプリケーションの人気の高まりにより、スマート無人書店の出現は、...

初のAI絵画がオークションで予想を大きく上回る43万2000ドルで落札

英国放送協会が10月25日に報じたところによると、人工知能によって制作された芸術作品がオークションで...

...

...

インテリジェントオートメーション: コンピュータビジョン、AI、ARが統合されるとき

インテリジェント オートメーションは、業界がまだビジネスに統合していない、かなり新しい概念です。この...

データガバナンスとビッグモデル統合の実践

コスト削減と効率向上の観点から、機械学習チームの構成を例に挙げ、Dipu TechnologyのDe...

金融規制当局が注意喚起:「AIによる顔の改変」などの新たな詐欺手法に注意

10月9日、近年、犯罪者が詐欺の手口を絶えず革新しており、金融消費者がそれを防ぐことが困難になってお...

...

IoT生体認証は職場でより大きな役割を果たす

組織はセンサーや監視を通じて職場のセキュリティと従業員の安全性を向上させるために生体認証を使用できま...

100キーワード学習法による人工知能(AI)の学習

100キーワード学習法は、キーワード(つまり、キーポイント)を中心に学習するという、効率的な学習法で...

マイクロソフトはセキュリティ上の理由から従業員によるOpenAI ChatGPTの使用を制限

11月10日、マイクロソフトは人工知能研究企業OpenAIに100億ドル以上を投資したにもかかわらず...

スマートロボットについて知っておくべきことすべて

スマートロボットは、タスクをより効率的かつ正確に実行し、生産性を向上させ、人的エラーを削減するように...

面接でコンシステントハッシュアルゴリズムについて再度質問されました。この答えは面接官を即死させるでしょう!

[[284994]]データシャーディングまずは例を見てみましょう。多くの場合、キャッシュには Re...