Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में अंतिम इंडेक्स तक पहुंचने के लिए न्यूनतम चरणों की संख्या खोजने का प्रोग्राम


मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है और हम वर्तमान में nums[0] पर स्थित हैं। प्रत्येक चरण में, हम वर्तमान इंडेक्स i से i+1 या i-1 या j पर कूद सकते हैं जहां nums[i] == nums[j]। हमें अंतिम इंडेक्स तक पहुंचने के लिए आवश्यक न्यूनतम चरणों की संख्या ढूंढनी है।

उदाहरण के लिए, यदि इनपुट nums = [4, 8, 8, 5, 4, 6, 5] है, तो आउटपुट 3 होगा, क्योंकि हम इंडेक्स 0 से इंडेक्स 4 पर कूद सकते हैं (दोनों मान 4 हैं)। फिर इंडेक्स 3 पर वापस कूदते हैं। अंत में, इंडेक्स 3 से 6 पर कूदते हैं क्योंकि दोनों के मान 5 हैं।

समाधान दृष्टिकोण

इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे (BFS + मान से इंडेक्स मैपिंग):

  • pos := डिफॉल्टडिक्ट(सूची) - प्रत्येक मान के इंडेक्स स्टोर करें
  • प्रत्येक इंडेक्स i और मान n के लिए nums में: pos[n].append(i)
  • n := len(nums)
  • visited := [False]*n, visited[0] = True
  • q := deque([(0,0)]) (इंडेक्स, दूरी)
  • जब तक q खाली नहीं:
    • (u,d) := q.popleft()
    • यदि u == n-1: d लौटाएं
    • प्रत्येक v के लिए pos[nums[u]] + [u-1, u+1] में:
      • यदि 0 <= v < n और not visited[v]:
        • visited[v] = True
        • q.append((v, d+1))
    • del pos[nums[u]] (दोबारा प्रोसेस न हो)

उदाहरण कोड

from collections import defaultdict, deque

class Solution:
    def solve(self, nums):
        pos = defaultdict(list)
        for i, n in enumerate(nums):
            pos[n].append(i)
        q = deque([(0, 0)])
        n = len(nums)
        visited = [False] * n
        visited[0] = True
        while q:
            u, d = q.popleft()
            if u == n - 1:
                return d
            for v in pos[nums[u]] + [u-1, u+1]:
                if 0 <= v < n and not visited[v]:
                    visited[v] = True
                    q.append((v, d+1))
            del pos[nums[u]]
        return -1

ob = Solution()
nums = [4, 8, 8, 5, 4, 6, 5]
print(ob.solve(nums))

इनपुट

[4, 8, 8, 5, 4, 6, 5]

आउटपुट

3

  1. 8-पज़ल को हल करने के चरणों की संख्या ज्ञात करने का पायथन प्रोग्राम 8-पज़ल को हल करने के चरणों की संख्या ज्ञात करने का पायथन प्रोग्राम

    मान लीजिए हमारे पास एक 3x3 बोर्ड है जहां सभी संख्याएं 0 से 8 की रेंज में हैं और कोई दोहराव नहीं है। अब हम 0 को उसके 4 पड़ोसियों में से किसी एक के साथ स्वैप कर सकते हैं, और हम इसे हल करके सभी व्यवस्थित क्रम प्राप्त करने की कोशिश कर रहे हैं, हमें लक्ष्य तक पहुंचने के लिए आवश्यक न्यूनतम चरणों की संख्य

  1. पायथन में शतरंज के नाइट द्वारा टार्गेट पोजीशन तक पहुंचने के लिए न्यूनतम चालें खोजने का प्रोग्राम पायथन में शतरंज के नाइट द्वारा टार्गेट पोजीशन तक पहुंचने के लिए न्यूनतम चालें खोजने का प्रोग्राम

    मान लीजिए हमारे पास दो मान r और c हैं। यदि एक शतरंज नाइट अनंत बड़े शतरंज बोर्ड पर निर्देशांक (0,0) पर रखा गया है, तो हमें (r,c) स्थान तक पहुंचने के लिए न्यूनतम चालों की संख्या ढूंढनी है। नाइट शतरंज की तरह चलता है: दो वर्ग क्षैतिज और एक लंबवत, या दो लंबवत और एक क्षैतिज।उदाहरण के लिए, यदि इनपुट r=6, c

  1. पायथन प्रोग्राम: संख्या के फैक्टर्स का न्यूनतम योग ढूंढें पायथन प्रोग्राम: संख्या के फैक्टर्स का न्यूनतम योग ढूंढें

    इस लेख में, हम नीचे दिए गए प्रॉब्लम स्टेटमेंट के समाधान के बारे में सीखेंगे: प्रॉब्लम स्टेटमेंट एक नंबर इनपुट दिए जाने पर, दी गई संख्या के फैक्टर्स का न्यूनतम योग ढूंढें। यहां हम सभी फैक्टर्स और उनके संबंधित योग की गणना करेंगे और फिर उनमें से न्यूनतम ढूंढेंगे। तो संख्या के गुणनफल का न्यूनतम योग ढू