고유한 양수 nums가 있는 nums라는 숫자 목록이 있다고 가정합니다. a*b =c*d, a, b, c 및 d가 모두 nums의 고유한 요소가 되도록 nums에서 (a, b, c, d)와 같은 4배의 수를 찾아야 합니다.
따라서 입력이 nums =[3, 6, 4, 8]과 같으면 4배는 [[3,8,6,4], [3,8,4,6]이기 때문에 출력은 8이 됩니다. , [8,3,6,4], [8,3,4,6], [6,4,3,8], [4,6,3,8], [6,4,8,3] , [4,6,8,3]].
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- c :=새 지도
- n :=숫자 크기
- 0 ~ n - 1 범위의 i에 대해
- i + 1 ~ n - 1 범위의 j에 대해
- x :=숫자[i] * 숫자[j]
- c[x] :=1 + (사용 가능한 경우 c[x], 그렇지 않은 경우 0)
- i + 1 ~ n - 1 범위의 j에 대해
- ret :=0
- c의 모든 값 목록에 있는 각 x에 대해 다음을 수행합니다.
- ret :=ret + x *(x - 1)
- ret * 4를 반환
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(nums): c = {} n = len(nums) for i in range(n): for j in range(i + 1, n): x = nums[i] * nums[j] c[x] = c.get(x, 0) + 1 ret = 0 for x in c.values(): ret += x * (x - 1) return ret * 4 nums = [3, 6, 4, 8] print(solve(nums))
입력
[3, 6, 4, 8]
출력
8