leetcode
Leet code 53 - Maximum Subarray
monsangter
2023. 4. 14. 11:49
브루트포스를 활용한 풀이 내풀이
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
sum1 = -100000
max_num = -100000
if len(nums) ==1:
return nums[0]
for i in range(len(nums)):
sum1 = nums[i]
if sum1 > max_num:
max_num = sum1
for j in range(i+1,len(nums)):
sum1 += nums[j]
if sum1 > max_num:
max_num = sum1
if sum1 > max_num:
max_num = sum1
return max_num
시간초과.
좀더 깔끔한 브루트포스
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
maxsum = nums[0]
for i in range(len(nums)):
cursum = 0
for j in range(i, len(nums)):
cursum += nums[j]
maxsum = max(maxsum, cursum)
return maxsum
카데인 알고리즘
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
cursum, maxsum = 0, nums[0]
for i in range(len(nums)):
cursum = max(nums[i], cursum + nums[i])
maxsum = max(cursum, maxsum)
return maxsum
이전의 누적합이 -가 된다면 필요없다고 판단, 제거하고 연산을 이어나가는 풀이.
카데인 알고리즘에서 불필요한 연산을 더욱 줄였다.
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
maxSum = nums[0]
curSum = 0
for n in nums:
if curSum < 0:
curSum = 0
curSum += n
maxSum = max(maxSub, curSum)
return maxSub