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

파이썬에서 주어진 조건을 만족하는 배열의 요소를 배열할 수 있는지 확인

<시간/>

num이라는 배열이 있다고 가정합니다. 조건 −

를 따르도록 nums의 요소를 재배열할 수 있는지 확인해야 합니다.

따라서 입력이 nums =[8, -4, 4, -8]과 같으면 출력은 i =0에 대해 [-4, -8, 4, 8]과 같은 배열을 배열하는 것처럼 True가 됩니다. nums[2*0 + 1] =2 * (-4) =-8 for i =1, nums[2*1 + 1] =2 * 4 =8

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

  • freq :=숫자의 요소와 그 빈도를 포함하는 지도
  • 절대값으로 정렬된 숫자의 각 항목에 대해 다음을 수행합니다.
    • freq[item]이 0이면
      • 다음 반복으로 이동
    • freq[2 * item]이 0이면
      • 거짓을 반환
    • 주파수[항목] :=빈도[항목] - 1
    • 주파수[2 * 항목] :=빈도[2 * 항목] - 1
  • 참 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

from collections import defaultdict
def solve(nums):
   freq = defaultdict(int)
   for item in nums:
      freq[item] += 1
   for item in sorted(nums, key = abs):
      if freq[item] == 0:
         continue
      if freq[2 * item] == 0:
         return False
      freq[item] -= 1
      freq[2 * item] -= 1
   return True
nums = [8, -4, 4, -8]
print(solve(nums))

입력

[8, -4, 4, -8]

출력

True