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