이름
정수 배열을 지정해 nums
가장 큰 합을 갖는 (적어도 하나 개의 번호를 포함하는) 인접한 서브 어레이를 발견하고 그 합을 반환한다.
예:
입력 : [-2,1, 설 포닐, -1,2,1, -5,4], 출력 : 6 명 : [4 -1,2,1] 최대 합 = 6을 갖는다.
후속 :
당신은 O (알아 낸 경우 N ) 솔루션, 더 미묘한 분할과 정복 방식을 사용하여 다른 솔루션을 코딩보십시오.
A는 생각했다 :
동적 프로그래밍. 내가 격자 인 배열 첨자는 최대 값의 끝에 nums [I] 배열을 넣어.
def maxSubArray(self, nums: List[int]) -> int:
dp = [0]*len(nums)
# 以nums[i]结尾的最大子序列的值
dp[0] = nums[0]
for i in range(1,len(nums)):
if dp[i-1] < 0:
dp[i] = nums[i]
else:
dp[i] = dp[i-1] + nums[i]
return max(dp)
생각이 :
언제 까지나 플러스와> 0, 당신은 항상 아래로 추가 할 수 있습니다 앞에 수있다. 그러나 <0이 부분은 그것을하지 것이다.
def maxSubArray(self, nums: List[int]) -> int:
for i in range(1,len(nums)):
if nums[i-1]>0:
nums[i] += nums[i-1]
return max(nums)
이러한 접근 방식은 정말 놀랍,의 분석에서 볼 수있다