मान लीजिए, हमें संख्याओं की एक सूची प्रदान की जाती है जिसे अंक कहते हैं। यदि सूची में मान मौजूद हैं तो यहां हम इंडेक्स i + नंबर [i] या i - नंबर [i] इंडेक्स i से कूद सकते हैं। इसलिए हमें इनपुट में क्रम को अपरिवर्तित रखते हुए अलग-अलग समता के साथ दूसरे मूल्य तक पहुंचने के लिए कम से कम आवश्यक छलांगों की संख्या का पता लगाना होगा। यदि हम भिन्न समता के साथ किसी अन्य संख्या तक नहीं पहुँच सकते हैं, तो इसे -1 पर सेट किया जाता है।
इसलिए, यदि इनपुट संख्याओं की तरह है =[7, 3, 4, 5, 6, 9, 6, 7], तो आउटपुट [−1, 1, 2, −1, −1, −1, 1 होगा। , -1]।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन को परिभाषित करें bfs() । इसमें मुझे लगेगा
-
q :=एक जोड़ी के साथ एक नई डबल एंडेड कतार (i, 0)
-
देखा :=एक नया सेट
-
जबकि q खाली नहीं है, करें
-
(j, d) :=q के अधिकांश तत्व को छोड़ दिया और q से सबसे बाईं ओर की वस्तु को हटा दें
-
देखा में j जोड़ें
-
अगर (nums[i] + nums[j]) mod 2 गैर-शून्य है, तो
-
वापसी d
-
-
[j + nums[j], j - nums[j]] में प्रत्येक k के लिए, करें
-
अगर 0 <=k <अंकों का आकार और k दिखाई नहीं दे रहा है, तो
-
q के दाएँ छोर पर (k, d + 1) डालें
-
-
-
-
वापसी 10^10
-
-
मुख्य विधि से निम्न कार्य करें -
-
उत्तर :=एक नई सूची
-
मेरे लिए 0 से लेकर अंकों के आकार तक, करें
-
देखा :=एक नया सेट
-
एक्स:=बीएफएस (आई)
-
x को उत्तर में जोड़ दें जब x <10^10 अन्यथा −1 को जोड़ दें
-
-
वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
from collections import deque class Solution: def solve(self, nums): def bfs(i): q = deque([(i, 0)]) seen = set() while q: j, d = q.popleft() seen.add(j) if (nums[i] + nums[j]) % 2: return d for k in [j + nums[j], j − nums[j]]: if 0 <= k < len(nums) and k not in seen: q.append((k, d + 1)) return 10 ** 10 ans = [] for i in range(len(nums)): seen = set() x = bfs(i) ans.append(x if x < 10 ** 10 else −1) return ans ob = Solution() print(ob.solve([7, 3, 4, 5, 6, 9, 6, 7]))
इनपुट
numbers = [7, 3, 4, 5, 6, 9, 6, 7]
आउटपुट
[−1, 1, 2, −1, −1, −1, 1, −1]