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

Python에서 k 연산으로 반복되는 숫자를 포함하는 가장 긴 하위 목록의 길이를 찾는 프로그램

<시간/>

nums라는 목록과 값 k가 있다고 가정하고 이제 목록에 있는 모든 숫자의 값을 업데이트할 수 있는 작업을 고려해 보겠습니다. 최대 k 연산을 수행한 후 반복되는 숫자를 포함하는 가장 긴 하위 목록의 길이를 찾아야 합니다.

따라서 입력이 nums =[8, 6, 6, 4, 3, 6, 6] k =2와 같으면 출력은 6이 됩니다. 왜냐하면 이 배열을 만들기 위해 4와 3을 6으로 변경할 수 있기 때문입니다. 8, 6, 6, 6, 6, 6, 6]이고 6이 모두 포함된 하위 목록의 길이는 6입니다.

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

  • 숫자가 비어 있으면

    • 0 반환

  • num_count :=빈 지도

  • max_count :=0

  • 시작 :=0

  • 각 인덱스 끝과 값 num에 대해 수행

    • num_count[num] :=num_count[num] + 1

    • max_count :=max_count 및 num_count[num]

      의 최대값
    • 종료 - 시작 + 1> max_count + k인 경우

      • num_count[nums[start]] :=num_count[nums[start]] - 1

      • 시작 :=시작 + 1

  • 반환 끝 - 시작 + 1

예시

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

from collections import defaultdict
def solve(nums, k):
   if not nums:
      return 0

   num_count = defaultdict(int)
   max_count = 0
   start = 0

   for end, num in enumerate(nums):
      num_count[num] += 1
      max_count = max(max_count, num_count[num])
      if end - start + 1 > max_count + k:
         num_count[nums[start]] -= 1
         start += 1
   return end - start + 1

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

입력

[8, 6, 6, 4, 3, 6, 6], 2

출력

6