[leetcode #53] Maximum Subarray
1776 ワード
Problem
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
Constraints:・ 1 <= nums.length <= 10⁵
・ -10⁴ <= nums[i] <= 10⁴
Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.Idea
これは最大のサブアレイを探して和を求める問題である.
O(n)を使用しないと、Times Limit Exceededが表示されます.Brute Forceで展開すると、配列をナビゲートしながら可能なすべてのサブアレイを比較します.
コードが短いがサブアレイの和が最大値であればよく考えるべきである.値currentSum、値maxSum.CurrentSumは、以前に求めた値と現在の値を比較することによってより大きな値を格納する変数です.maxSumは最初の値に初期化され、currentSumよりも常に大きな値が格納されます.
CurrentSumは現在のインデックス値を含む最大値の和であり、maxSumは配列全体の最大値の和である.インデックスを変更するたびに、以前に求めた最大値と、現在のインデックスを含むサブ配列の最大値を比較します.
Solution
class Solution {
public int maxSubArray(int[] nums) {
int currentSum = nums[0];
int maxSum = nums[0];
for(int i=1; i<nums.length; i++) {
currentSum = Math.max(nums[i]+currentSum, nums[i]);
maxSum = Math.max(currentSum, maxSum);
}
return maxSum;
}
}
Reference
https://leetcode.com/problems/maximum-subarray/
Reference
この問題について([leetcode #53] Maximum Subarray), 我々は、より多くの情報をここで見つけました https://velog.io/@timevoyage/leetcode-53-Maximum-Subarrayテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol