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

पायथन में जांचें कि सरणी का योग तीन ऑपरेशनों से K बनाया जा सकता है या नहीं


मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है और एक धनात्मक मान K है। हम nums पर इन तीन ऑपरेशनों में से कोई भी कर सकते हैं:

  • एक संख्या को ऋणात्मक बनाएं
  • संख्या में उसका इंडेक्स (1 से शुरू) जोड़ें
  • संख्या से उसका इंडेक्स घटाएं

अंत में, हमें जांचना है कि क्या प्रत्येक तत्व पर ये ऑपरेशन केवल एक बार करके सरणी को इस तरह बदला जा सकता है कि सरणी का योग k हो जाए।

उदाहरण के लिए, यदि nums = [1, 2, 3, 7], k = 8 है, तो आउटपुट True होगा क्योंकि हम 2 और 3 से उनके इंडेक्स घटाकर सरणी को [1, 0, 0, 7] बना सकते हैं, अब योग 8 = k है।

हल करने का तरीका

  1. डायनामिक प्रोग्रामिंग का उपयोग करें
  2. is_ok() फ़ंक्शन परिभाषित करें जो मेमोइजेशन के साथ पुनरावर्ती रूप से जांचता है
  3. प्रत्येक तत्व के लिए तीन विकल्प आजमाएं: मूल मान, मान - 2×nums[i], मान ± (i+1)
  4. यदि अंत में कुल == k, तो True लौटाएं

उदाहरण

size = 100

def is_ok(i, total, k, nums, table):
    n = len(nums)
    if total <= 0:
        return False
    if i >= n:
        if total == k:
            return True
        return False
    if table[i][total] != -1:
        return table[i][total]
    table[i][total] = is_ok(i+1, total - 2 * nums[i], k, nums, table) or is_ok(i+1, total, k, nums, table)
    table[i][total] = is_ok(i+1, total - (i+1), k, nums, table) or table[i][total]
    table[i][total] = is_ok(i+1, total + i + 1, k, nums, table) or table[i][total]
    return table[i][total]

def solve(nums, k):
    total = sum(nums)
    table = [[-1] * size for _ in range(size)]
    return is_ok(0, total, k, nums, table)

nums = [1, 2, 3, 7]
k = 8
print(solve(nums, k))

इनपुट

[1, 2, 3, 7], 8

आउटपुट

True
  1. - पायथन में जांचें कि क्या हम दो पार्टीशन का ग्रुप बना सकते हैं जिनका योग समान हो

    मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची है, हमें जांचना है कि क्या हम nums को दो ग्रुप में पार्टीशन कर सकते हैं जहां दोनों ग्रुप में तत्वों का योग समान हो। उदाहरण के लिए, यदि इनपुट nums = [2, 3, 6, 5] है, तो आउटपुट True होगा, क्योंकि हम [2, 6] और [3, 5] जैसे ग्रुप बना सकते हैं। इसे हल करन

  1. - Python में तीन अद्वितीय एलिमेंट जिनका योग k के बराबर है, मौजूद हैं या नहीं जांचने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची और एक मान k है, हमें यह जांचना है कि क्या हम सूची में तीन अद्वितीय एलिमेंट ढूंढ सकते हैं जिनका योग k है। तो, यदि इनपुट nums = [11, 4, 6, 10, 5, 1], k = 20 जैसा है, तो आउटपुट True होगा, क्योंकि हमारे पास [4, 6, 10] संख्याएं हैं जिनका योग 20 है। इसे

  1. - Python में चार एलिमेंट जिनका योग k के बराबर है, मौजूद हैं या नहीं जांचने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक संख्याओं की एक सूची और एक मान k है, हमें यह जांचना है कि क्या सूची में चार अद्वितीय एलिमेंट हैं जो k तक जोड़ते हैं। तो, यदि इनपुट nums = [11, 4, 6, 10, 5, 1], k = 25 जैसा है, तो आउटपुट True होगा, क्योंकि हमारे पास [4, 6, 10, 5] है जिनका योग 25 है। इसे हल करने के लिए,