Maximum Subarray

2199 ワード

質問する


Given an integer array nums , find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
A subarray is a contiguous part of an array.
Example 1:
Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.

Example 2:
Input: nums = [1]
Output: 1

Example 3:
Input: nums = [5,4,-1,7,8]
Output: 23

ろんり


問題の条件

  • アレイに隣接する要素を追加すると、最大値
  • が返されます.
  • このとき隣接するのは、連続してリストされた要素
  • である.

    私の考えの論理

  • これは以前にリプルを解いたときに一度見たことがあるようですが、実は理解も覚えていません.どうやって解いたのか覚えていません.いくつかの問題しか見られなかったのを覚えていますが...
  • 問題は理解できますが、どうすればいいか分からないので、問題を理解すると30分も見たい答えを我慢しました.もちろん、答えはなくて、ほほほ、Asale...
  • 私が考えているのは無知ですが、私が考えている方法はすべての場合の数を求めることです[1,2,3,4]
    このような配列がある場合はindex 0から1~4->index 1から2~4まで…このように続けていく方法です.
  • の授業を聞いて、このように解決する時間の複雑さはO(n^2)です.最悪なら...
  • のようにすべての状況で求めることができる方法をbrute force方法と呼ぶ.无差别対入攻撃の恐ろしい名前もある.
  • の授業では、この方法はボトルネック、不要な仕事、重複した仕事を生み出すため、効率が低下します.
    -どれも新しい配列に入れて比較するO(n^3)よりいいのかな…?
  • 解答(Kadane'sアルゴリズムを使用)


    レポートは
  • を超え、まず、時間複雑度はO(n)の時間複雑度であり、入力のみでメモリを占有する.私の論理は理解できませんが、見終わったら不思議です.それは可能だったのか...
  • 怠惰で、単独で画像を作るよりもYouTubeでの方がカットを上手に説明してくれて、(ちなみにこの動画をお勧めします)、おじさんもとても面白くて、いろいろな方法を教えてくれて、聞きながら比較できるようになりました.
  • まず、原理は1つの大きな値を判断するために、2つに分けられ、1つは標準的な要素自体であり、もう1つは前に加えた比較であり、より大きな値を返す.
  • 画像の右上隅のmaxには(-5,1)が含まれています.これは、標準的な-5と、以前に加算された6の-5の値が-1であるためです.両者を比較すると、大きな数が1になります.
  • このように最大値を吐出すボックス(画面上は青色のボックス)で最大値6を返すと、
  • が閉じる-終了する.
  • の重要な点は、すべての場合の数ではなく、私自身が前にしたことと比較して、両者を1つ選べばいいので、これ以上スペースを占有する必要はありません.wow..
  • に答える

    var maxSubArray = function(nums) {
      1)    var sum = nums[0];
            var max = sum;
      
            for(let i = 1; i < nums.length ; i++){
      2)          sum=(sum+nums[i])>nums[i]?(sum+nums[i]):nums[i];
      3)          max=sum>max?sum:max;
            }
            return max;
       };
    
    1)インデックスの初期値をsumの初期値に設定します.maxは、追加した数値をインデックスの値と比較して、より大きな値を得る.
    2)インデックス値を前の連続加算時の最大値と比較し、より大きな値を返します.