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

파이썬에서 가장 빈번한 요소의 빈도를 찾는 프로그램

<시간/>

배열 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