Python 언어 설명 최대 연속 서브 시퀀스 와

최대 연속 하위 서열 을 구 하 는 것 은 매우 전형 적 이 고 오래된 면접 문제 입 니 다.갓 졸업 하고 일자 리 를 구 하 는 면접 에서 도 같은 문 제 를 만 났 던 것 을 기억 합 니 다.오늘 갑자기 생각 났 다.마침 졸업 시즌 이 다가 오고 있 고,또 어 려 운 응시생 들 이 각종 면접 을 볼 때 가 되 어 작은 코드 를 써 서 이 문 제 를 해결 해 주 었 다.또한 여러분 이 일자 리 를 찾 는 동지 들 이 모두 마음 속 의 이상 적 인 offer 를 받 기 를 바 랍 니 다.이로부터 고부 수 를 이 겨 백부 미 를 이 겨 인생 의 정점 에 오 르 기 를 바 랍 니 다.
1.문제 설명
만약 에 한 배열(python 에서 list 라 고 가정 합 니 다)[1,3,-3,4,-6,-1]이 있 으 면 배열 에서 가장 대련 속 자 서열 의 합 을 구 합 니 다.예 를 들 어 이 배열 에서 최대 연속 서브 시퀀스 의 합 은 5,즉 1+3+(-3)+4=5 이다.
2.O(n2)의 해법
가장 간단 하고 거 친 방식,이중 순환,maxsum 표지 의 최대 연속 서브 시퀀스 와.그리고 매번 판단 업데이트.할 말 이 별로 없 으 니 바로 코드 를 올 려 라.

def maxSum(list):
  maxsum = list[0]
  for i in range(len(list)):
    maxtmp = 0
    for j in range(i,len(list)):
      maxtmp += list[j]
      if maxtmp > maxsum:
        maxsum = maxtmp
  return maxsum
if __name__ == '__main__':
  list = [1,3,-3,4,-6]
  maxsum = maxSum(list)
  print "maxsum is",maxsum
실행 결과

maxsum is 5
3.O(n)해법
동적 규범 을 말 하 는 모든 곳 에서 최대 연속 서브 시퀀스 와 예 를 찾 을 수 있다.구체 적 으로 말 하면 배열 이 a[i]라 고 가정 합 니 다.최대 연속 적 인 하위 서열 과 위치 0-(n-1)사이 의 특정한 위치 에서 끝나 야 하기 때 문 입 니 다.그러면 순환 이 i 번 째 위치 에 옮 겨 다 닐 때 앞의 연속 서브 시퀀스 와 0 보다 작 으 면 위치 i 로 끝 나 는 최대 연속 서브 시퀀스 와 i 번 째 위치의 값 은 a[i]입 니 다.만약 에 앞의 연속 서브 시퀀스 와 0 이상 이면 위치 i 로 끝 나 는 최대 연속 서브 시퀀스 와 b[i]=max{b[i-1]+a[i],a[i]}을 말한다.그 중에서 b[i]는 최대 연속 서브 시퀀스 의 합 을 말한다.

def maxSum(list_of_nums):
  maxsum = 0
  maxtmp = 0
  for i in range(len(list_of_nums)):
    if maxtmp <= 0:
      maxtmp = list_of_nums[i]
    else:
      maxtmp += list_of_nums[i]

    if(maxtmp > maxsum):
      maxsum = maxtmp
  return maxsum
if __name__ == '__main__':
  list_of_num = [1,3,-3,4,-6]
  maxsum = maxSum(list_of_num)
  print "maxsum is: ",maxsum
실행 결과

maxsum is 5
총결산
이상 은 Python 언어 가 최대 연속 서브 시퀀스 와 모든 내용 을 묘사 하 는 데 도움 이 되 기 를 바 랍 니 다.관심 이 있 는 친 구 는 본 사 이 트 를 계속 참고 할 수 있 습 니 다.
Python 생 성 디지털 이미지 코드 공유
python 디지털 이미지 처리 의 고급 필터 코드 상세 설명
python+mongodb 데이터 캡 처 상세 소개
부족 한 점 이 있 으 면 댓 글로 지적 해 주세요.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기