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

पायथन में कम से कम k विषम मानों वाले सबसे लंबे बढ़ते सबसीक्वेंस की लंबाई ज्ञात करने का प्रोग्राम


मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची और एक मान k है। हमें कम से कम k विषम तत्वों वाले सबसे लंबे बढ़ते सबसीक्वेंस का आकार ज्ञात करना है।

उदाहरण के लिए, यदि इनपुट है nums = [12, 14, 16, 5, 7, 8], k = 2, तो आउटपुट 3 होगा, क्योंकि कम से कम 2 विषम मानों वाला सबसे लंबा बढ़ता सबसीक्वेंस [5, 7, 8] है।

एल्गोरिदम (ब्रूट-फोर्स DFS)

  • best := 0
  • dp(i, j, odd, taken) फ़ंक्शन परिभाषित करें:
    • यदि odd >= k, तो best = max(best, taken)
    • यदि j == len(nums), तो वापस लौटें
    • यदि nums[j] > nums[i], तो dp(j, j+1, odd + (nums[j]&1), taken+1) कॉल करें
    • dp(i, j+1, odd, taken) कॉल करें
  • मुख्य विधि से प्रत्येक i के लिए dp(i, i+1, nums[i]&1, 1) कॉल करें
  • best वापस करें

उदाहरण

class Solution:
    def solve(self, nums, k):
        best = 0
        def dp(i, j, odd, taken):
            nonlocal best
            if odd >= k: best = max(best, taken)
            if j == len(nums): return
            if nums[j] > nums[i]:
                dp(j, j + 1, odd + (nums[j] & 1), taken + 1)
            dp(i, j + 1, odd, taken)
        for i in range(len(nums)):
            dp(i, i + 1, nums[i] & 1, 1)
        return best

ob = Solution()
nums = [12, 14, 16, 5, 7, 8]
k = 2
print(ob.solve(nums, k))

इनपुट

[12, 14, 16, 5, 7, 8], 2

आउटपुट

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

    मान लीजिए हमारे पास संख्याओं की एक सूची है। हमें सबसे लंबी बढ़ती हुई उप-अनुक्रम (Longest Increasing Subsequence) की लंबाई ढूंढनी है। उदाहरण के लिए, यदि इनपुट [6, 1, 7, 2, 8, 3, 4, 5] है, तो आउटपुट 5 होगा, क्योंकि सबसे लंबी बढ़ती हुई उप-अनुक्रम [2, 3, 4, 5, 6] है। इसे हल करने के लिए हम निम्न चरणों का

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

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

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

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