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

Python에서 배열의 좋은 쌍을 계산하는 프로그램

<시간/>

음수가 아닌 값을 가진 num이라는 배열이 있다고 가정합니다. 배열에 있는 좋은 인덱스 쌍을 찾아야 합니다. 대답이 너무 크면 대답 mod 10^9+7을 반환합니다. 여기에서 한 쌍의 인덱스(i, j)는 다음 조건을 모두 충족할 때 nice라고 합니다. 1. 0 <=i 와 동일

참고 − 여기서 rev()는 정수의 양수 부분만 반전하므로 rev(564)가 있으면 465를 의미하고 rev(540)가 있으면 45를 반환합니다.

따라서 입력이 nums =[97,2,42,11]과 같으면 첫 번째 [97 + rev (42) =97+24 =121, 그리고 42 + rev(97) =42 + 79 =121] 그리고 두 번째 [2 + rev(11) =2 + 11 =13 and 11 + rev(2) =13].

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

  • m :=(10^9) +7

  • dic :=기본값이 0인 빈 맵

  • 숫자의 각 숫자에 대해 수행

    • rev :=숫자의 역순

    • dic[num - rev] 1 증가

  • 해상도:=0

  • dic의 모든 값 목록에 있는 각 val에 대해 수행

    • res :=res + (val*(val-1))/2의 몫

  • res mod m 반환

예시

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

from collections import defaultdict
def solve(nums):
   m = (10**9)+7
   dic = defaultdict(int)
   for num in nums:
      rev=int(str(num)[::-1])
      dic[num-rev]+=1

   res=0
   for val in dic.values():
      res += (val*(val-1)) // 2

   return res % m

nums = [97,2,42,11]
print(solve(nums))

입력

[97,2,42,11]

출력

2