nums라는 숫자 목록과 또 다른 값 k가 있다고 가정합니다. 어떤 요소를 1씩 증가시키는 연산을 생각해 봅시다. 우리는 최대 k 번 수행할 수 있으며 얻을 수 있는 가장 자주 발생하는 수의 값을 찾아야 합니다. 솔루션이 둘 이상인 경우 가능한 가장 작은 수를 선택하십시오.
따라서 입력이 nums =[1, 0, 0, 0, 8, 8, 8, 8] k =8과 같으면 출력은 8이 됩니다. 1, 7배로 증가하여 8을 얻을 수 있기 때문입니다. 0을 1로 늘리면 [8, 1, 0, 0, 8, 8, 8, 8]이 됩니다. 따라서 결과는 8입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
- 목록 번호 정렬
- 낮음 :=0, 높음 :=0
- 거리 :=0, 최고 :=0
- ret :=-1
- 높은 동안 <숫자의 크기, do
- high> 0이고 nums[high]가 nums[high - 1]과 같지 않으면
- dist :=dist +(high - low) *(nums[high] - nums[high - 1])
- 높음 :=높음 + 1
- dist> k, do
- dist :=dist - nums[high - 1] - nums[low]
- 낮음 :=낮음 + 1
- 높음 - 낮음> 가장 좋은 경우
- 최고:=높음 - 낮음
- ret :=nums[높음 - 1]
- 반환
- high> 0이고 nums[high]가 nums[high - 1]과 같지 않으면
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시 코드
class Solution: def solve(self, nums, k): nums.sort() low, high = 0, 0 dist = 0 best = 0 ret = -1 while high < len(nums): if high > 0 and nums[high] != nums[high - 1]: dist += (high - low) * (nums[high] - nums[high - 1]) high += 1 while dist > k: dist -= nums[high - 1] - nums[low] low += 1 if high - low > best: best = high - low ret = nums[high - 1] return ret ob = Solution() nums = [1, 0, 0, 0, 8, 8, 8, 8] k = 8 print(ob.solve(nums, k))
입력
[1, 0, 0, 0, 8, 8, 8, 8], 8
출력
8