(LeetCode) 53. Maximum Subarray

53. Maximum Subarray

  • Explore : Interview > Top Interveiw Questions > Easy Collection
  • 분류 : Dynamic Programming
  • 난이도 : Easy

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

1
2
3
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

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

Example 3

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

Constraints

  • 1 <= nums.length <= 3 * 10^4
  • -10^5 <= nums[i] <= 10^5

Solution

Exapnder
1
2
3
4
5
6
7
8
9
10
11
class Solution {
fun maxSubArray(nums: IntArray): Int {
var sum = nums[0]
var result = nums[0]
for (i in 1 until nums.size) {
sum = Math.max(sum + nums[i], nums[i])
result = Math.max(sum, result)
}
return result
}
}

Point of Thinking

  • 힌트는 배열의 연속적인 구간합이다.
  • 배열을 순회하면서 현재까지의 합을 sum이라고 할때, 다음 값을 더하는 게 더 크다면 합산한다.
  • 궁극적으로 구하고자하는 것은 구간합이므로, sum과 현재까지 구간합 중 가장 큰 값을 비교해서 갱신한 후 반환하면 Accepted.