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

파이썬에서 k 증분 후 가장 많이 발생하는 숫자를 찾는 프로그램

<시간/>

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]
    • 반환

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

예시 코드

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