Python 최대 하위 순서 와 방법 예제
3328 단어 Python최대 하위 순서 와
하나의 서열(최소 1 개의 수 포함)을 지정 하고 이 서열 에서 연속 적 인 하위 서열 을 찾 아 하위 서열 과 최대 로 합 니 다.
예 를 들 어 주어진 서열[-2,1,-3,4,-1,2,1,-5,4],
연속 서브 시퀀스[4,-1,2,1]의 것 과 최대,6 이다.
나 v 1.0
class Solution:
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
l = len(nums)
i = 0
result = nums[0]
while i < l:
sums = []
temp = 0
for j in range(i, l):
temp+=nums[j]
sums.append(temp)
if result < max(sums):
result = max(sums)
i+=1
return result
테스트 결 과 는 다음 과 같다.로 컬 운행 시간 은 14.7s 로 나의 방법 이 너무 거칠다 는 것 을 설명 한다.더 좋 은 알고리즘 을 찾 아야 한다.
최적화 후 v 1.1.최적화 방안,sums 배열 을 제거 하고 공간 을 절약 합 니 다.그러나 시간 복잡 도 는 변 하지 않 는 다.
l = len(nums)
i = 0
result = nums[0]
while i < l:
temp = 0
for j in range(i, l):
temp+=nums[j]
if result < temp:
result = temp
i+=1
return result
여전히 200/202 테스트 용례 만 통과 하고 시간 제한 을 초과 합 니 다.그러나 로 컬 운행 시간 은 8.3s 이다.진보 가 있다.다른 사람시간 복잡 도 O(NLogN)
입력 한 서열 을 두 부분 으로 나 누 는데 이때 세 가지 상황 이 있다.
1)최대 하위 서열 은 왼쪽 부분 에 있다
2)최대 하위 서열 은 오른쪽 부분 에 있다
3)최대 하위 서열 이 좌우 부분 을 뛰어넘는다.
앞의 두 가지 상황 은 재 귀 구 해 를 통 해 세 번 째 상황 은 통과 할 수 있다.
분 치 법 코드 는 대략 다음 과 같 습 니 다.emmm...아직 완전히 이해 되 지 않 았 다.
def maxC2(ls,low,upp):
#"divide and conquer"
if ls is None: return 0
elif low==upp: return ls[low]
mid=(low+upp)/2 #notice: in the higher version python, “/” would get the real value
lmax,rmax,tmp,i=0,0,0,mid
while i>=low:
tmp+=ls[i]
if tmp>lmax:
lmax=tmp
i-=1
tmp=0
for k in range(mid+1,upp):
tmp+=ls[k]
if tmp>rmax:
rmax=tmp
return max3(rmax+lmax,maxC2(ls,low,mid),maxC2(ls,mid+1,upp))
def max3(x,y,z):
if x>=y and x>=z:
return x
return max3(y,z,x)
동적 계획 알고리즘,시간 복잡 도 는 O(n)입 니 다.분석:최 적 화 된 서브 구 조 를 찾 습 니 다.
l = len(nums)
i = 0
sum = 0
MaxSum = nums[0]
while i < l:
sum+=nums[i]
if sum > MaxSum:
MaxSum = sum
if sum < 0:
sum = 0
i+=1
return MaxSum
Oh!My god!!! !!!!!!!!운행 에 0.2s 밖 에 안 걸 렸 어!!!!!!!!!!!!!!!!!!!이 건 너무 강 한 거 아니 야!!최적화 후 운행 시간 0.1s.
sum = 0
MaxSum = nums[0]
for i in range(len(nums)):
sum += nums[i]
if sum > MaxSum:
MaxSum = sum
if sum < 0:
sum = 0
return MaxSum
그 속4.567914.바짝 붙 어야 합 니 다.
MaxSum = sum
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.