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

Python에서 K 요소를 삭제한 후 최소 진폭을 찾는 프로그램

<시간/>

nums라는 숫자가 있고 또 다른 값 k가 있다고 가정합니다. nums에서 k개의 요소를 제거하면 (최대 nums - 최소 nums)의 최소값을 찾습니다.

따라서 입력이 nums =[4, 10, 3, 2, 8, 9] k =3과 같으면 출력은 2가 됩니다. 왜냐하면 10, 8, 9를 제거하면 최대값은 4이고 최소값은 2이기 때문입니다. 따라서 차이는 2입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 목록 번호 정렬

  • p :=숫자 크기 - k

  • m :=(nums의 마지막 요소) - nums[0]

  • 범위 0에서 숫자 크기 - p의 i에 대해 수행

    • nums[i + p - 1] - nums[i]

      • m :=숫자[i + p - 1] - 숫자[i]

  • 리턴 m

예시

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

def solve(nums, k):
   nums = sorted(nums)
   p = len(nums) - k
   m = nums[-1] - nums[0]
   for i in range(0, len(nums) - p + 1):
      if nums[i + p - 1] - nums[i] < m:
         m = nums[i + p - 1] - nums[i]
   return m

nums = [10, 4, 3, 2, 9, 8]
k = 3
print(solve(nums, k))

입력

[10, 4, 3, 2, 9, 8], 3

출력

2