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

पायथन में दी गई लिस्ट के सबसे लंबे अंकगणितीय सबसीक्वेंस की लंबाई खोजने का प्रोग्राम


मान लीजिए हमारे पास nums नामक संख्याओं की एक लिस्ट है, हमें सबसे लंबे अंकगणितीय सबसीक्वेंस की लंबाई ढूंढनी है। जैसा कि हम जानते हैं, एक अनुक्रम S[i] अंकगणितीय होता है जब S[i+1] - S[i] का मान हर i के लिए समान होता है (0 ≤ i < S का आकार - 1)।

उदाहरण के लिए, यदि इनपुट nums = [1, 4, 7, 10, 13, 20, 16] है, तो आउटपुट 6 होगा, क्योंकि सबसीक्वेंस [1, 4, 7, 10, 13, 16] अंकगणितीय है क्योंकि प्रत्येक लगातार तत्व का अंतर 3 है।

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

इस समस्या को हल करने के लिए हम डायनामिक प्रोग्रामिंग के साथ हैशमैप का उपयोग करेंगे:

  • n := arr का आकार
  • यदि n <= 1 है, तो n लौटाएं
  • res := 0
  • dp := एक खाली मैप, डिफ़ॉल्ट मान 1
  • i को 1 से n-1 तक लूप चलाएं:
    • j को 0 से i-1 तक लूप चलाएं:
      • diff := arr[i] - arr[j]
      • dp[i, diff] := dp[j, diff] + 1
      • res := max(res, dp[i, diff])
  • res लौटाएं

पायथन कार्यान्वयन

from collections import defaultdict

class Solution:
    def solve(self, arr):
        n = len(arr)
        if n <= 1:
            return n
        res = 0
        dp = defaultdict(lambda: 1)
        for i in range(1, n):
            for j in range(i):
                diff = arr[i] - arr[j]
                dp[i, diff] = dp[j, diff] + 1
                res = max(res, dp[i, diff])
        return res

ob = Solution()
nums = [1, 4, 7, 10, 13, 20, 16]
print(ob.solve(nums))

इनपुट

[1, 4, 7, 10, 13, 20, 16]

आउटपुट

6
  1. - पायथन में सबसे लंबी एनाग्राम उप-अनुक्रम की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास दो लोअरकेस स्ट्रिंग्स S और T हैं, हमें सबसे लंबी एनाग्राम उप-अनुक्रम की लंबाई ढूंढनी है। उदाहरण के लिए, यदि इनपुट S = helloworld, T = hellorld है, तो आउटपुट 8 होगा। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे: c := एक नया मैप, d := एक नया मैप। i को 0 से len(a) - 1 तक लूप म

  1. - पायथन में सबसे लंबे संतुलित उप-अनुक्रम की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक स्ट्रिंग s है जिसमें ब्रैकेट्स ( और ) हैं, हमें संतुलित ब्रैकेट्स के सबसे लंबे उप-अनुक्रम की लंबाई ढूंढनी है। उदाहरण के लिए, यदि इनपुट s = ())(()( है, तो आउटपुट 4 होगा, क्योंकि हम ()() जैसा उप-अनुक्रम ले सकते हैं। इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे: res := 0, n

  1. - पायथन में दी गई सूची से k सबसे लंबे शब्द खोजें

    हमारे पास एक परिदृश्य है जहां हमें कई शब्दों वाली सूची से शीर्ष n सबसे लंबे शब्द चुनने हैं। इस लेख में हम इसे प्राप्त करने के विभिन्न दृष्टिकोण देखेंगे। count() और sorted() के साथ हम पहले सूची के तत्वों को रिवर्स क्रम में सॉर्ट करते हैं ताकि सबसे लंबे शब्द सूची की शुरुआत में उपलब्ध हों। फिर प्रत्ये