Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python에서 가장 경쟁력 있는 부분 시퀀스를 찾는 프로그램

<시간/>

배열 nums와 다른 값 k가 있다고 가정하면 크기 k의 nums에서 가장 경쟁력 있는 부분 시퀀스를 찾아야 합니다. 여기서 하위 시퀀스 s1은 s1과 s2가 다른 첫 번째 위치에서 하위 시퀀스 s1이 s2의 해당 숫자보다 작은 숫자를 갖는 경우 하위 시퀀스 s2(동일한 크기)보다 경쟁력이 있습니다.

따라서 입력이 nums =[4,6,3,7] k =2와 같으면 크기가 2인 모든 부분 시퀀스 중에서 {[4,6], [4, 3], [4,7], [6,3], [6,7], [3,7]}, [3,7]이 가장 경쟁력이 있습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 시도 횟수:=숫자 크기 - k
  • 스택 :=새 목록
  • 숫자 단위의 각 숫자에 대해 다음을 수행합니다.
    • 스택이 비어 있지 않고 num <스택의 상단 및 시도> 0인 동안 do
      • 스택에서 요소 팝
      • 시도 횟수:=시도 횟수 - 1
    • num을 스택에 푸시
  • 스택의 상위 k개 요소 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(nums, k):
   attempts = len(nums) - k
   stack = []
   for num in nums:
      while stack and num < stack[-1] and attempts > 0:
         stack.pop()
         attempts -= 1
      stack.append(num)

   return stack[:k]

nums = [4,6,3,7]
k = 2
print(solve(nums, k))

입력

[4,6,3,7], 2

출력

[3,7]