मान लीजिए हमारे पास नॉन-नेगेटिव मानों वाला nums नामक एक ऐरे है। हमें ऐरे में मौजूद नाइस इंडेक्स जोड़े की संख्या ढूंढनी है, यदि उत्तर बहुत बड़ा है, तो उत्तर को 10^9+7 मॉड्यूलो वापस करें। यहां इंडेक्स का जोड़ा (i, j) नाइस कहलाता है जब वे निम्नलिखित सभी शर्तों को पूरा करते हैं:
0 <= i < j < numsका आकारnums[i] + rev(nums[j]) == nums[j] + rev(nums[i])
नोट - यहां rev() एक इंटीजर के केवल पॉजिटिव भाग को उलट देता है, इसलिए यदि rev(564) है, तो इसका मतलब 465 है, लेकिन यदि rev(540) है, तो यह 45 वापस करता है।
उदाहरण के लिए, यदि इनपुट nums = [97,2,42,11] है, तो आउटपुट 2 होगा क्योंकि दो जोड़े (0,2) और (1,3) हैं, पहले के लिए [97 + rev(42) = 97+24 = 121, और 42 + rev(97) = 42 + 79 = 121] और दूसरे के लिए [2 + rev(11) = 2 + 11 = 13 और 11 + rev(2) = 13]।
हल करने के चरण
m := (10^9) + 7dic :=एक खाली मैप जिसका डिफ़ॉल्ट मान 0 है।numsमें प्रत्येकnumके लिए:rev := numका उल्टाdic[num - rev]को 1 से बढ़ाएं।
res := 0dicके सभी मानों के लिएvalमें लूप चलाएं:res := res + (val * (val - 1)) // 2
res % 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