배열 num과 다른 값 k가 있다고 가정합니다. 한 번의 작업으로 indexof nums를 선택하고 해당 인덱스의 요소를 1만큼 늘릴 수 있습니다. 최대 k 수의 작업을 수행한 후 요소의 가능한 최대 빈도를 찾아야 합니다.
따라서 입력이 nums =[8,3,6], k =9와 같으면 3을 5로, 6을 2로 업데이트하여 [8,8,8]로 만들 수 있기 때문에 출력은 3이 됩니다. 7번의 작업 후에 최대 빈도는 3입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
목록 번호 정렬
-
왼쪽 :=0, 오른쪽 :=1
-
동안 <숫자 크기, 수행
-
k :=k -(숫자[오른쪽] - 숫자[오른쪽-1]) *(오른쪽 - 왼쪽)
-
k <0이면
-
k :=k + 숫자[오른쪽] - 숫자[왼쪽]
-
왼쪽 :=왼쪽 + 1
-
-
오른쪽 :=오른쪽 + 1
-
-
오른쪽 - 왼쪽으로 돌아가기
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(nums, k): nums.sort() left = 0 right = 1 while right < len(nums): k -= (nums[right] - nums[right-1]) * (right - left) if k < 0: k += nums[right] - nums[left] left += 1 right += 1 return right - left nums = [8,3,6] k = 9 print(solve(nums, k))
입력
[8,3,6], 9
출력
3