Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình đếm các cặp đẹp trong một mảng bằng Python

Giả sử chúng ta có một mảng được gọi là nums với các giá trị không âm. Chúng ta phải tìm số cặp chỉ số đẹp có trong mảng, nếu câu trả lời quá lớn thì trả về câu trả lời mod 10 ^ 9 + 7. Ở đây một cặp chỉ số (i, j) được cho là tốt khi chúng thỏa mãn tất cả các điều kiện sau:1. 0 <=i

Lưu ý - Ở đây rev () chỉ đảo ngược phần dương của một số nguyên, vì vậy nếu ở đó rev (564) có nghĩa là 465, nhưng nếu ở đó rev (540), nó trả về 45.

Vì vậy, nếu đầu vào giống như nums =[97,2,42,11], thì đầu ra sẽ là 2 vì có hai cặp (0,2) và (1,3), cho cặp đầu tiên [97 + vòng (42) =97 + 24 =121 và 42 + rev (97) =42 + 79 =121] và đối với cái thứ hai [2 + rev (11) =2 + 11 =13 và 11 + rev (2) =13].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • m:=(10 ^ 9) +7

  • dic:=một bản đồ trống, có giá trị mặc định là 0

  • đối với mỗi số trong số, thực hiện

    • rev:=đảo ngược của num

    • tăng dic [num - rev] lên 1

  • res:=0

  • cho mỗi val trong danh sách tất cả các giá trị của dic, do

    • res:=res + thương số của (val * (val-1)) / 2

  • trả lại bản sửa đổi m

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

[97,2,42,11]

Đầu ra

2