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