leetcode - 53 최대 부분 배열

이름

정수 배열을 지정해  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)

이러한 접근 방식은 정말 놀랍,의 분석에서 볼 수있다

게시 82 개 원래 기사 · 원 찬양 2 · 조회수 4337

추천

출처blog.csdn.net/qq_22498427/article/details/105101747