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
- freq[item]이 0이면
- 참 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
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