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

पायथन में निकटतम अनुवर्ती योग खोजने का कार्यक्रम

मान लीजिए कि हमारे पास एक सरणी संख्या और एक अन्य मूल्य लक्ष्य है। हम अंकों के बाद के क्रम का चयन करना चाहते हैं ताकि इसके तत्वों का योग लक्ष्य के सबसे नजदीक हो। तो दूसरे शब्दों में, यदि बाद के तत्वों का योग s है, तो हम निरपेक्ष अंतर को कम करना चाहते हैं |s - लक्ष्य|।

इसलिए हमें |s - लक्ष्य का न्यूनतम संभव मान ज्ञात करना होगा। इसलिए, यदि इनपुट संख्या =[8,-8,16,-1] लक्ष्य =-3 की तरह है, तो आउटपुट 2 होगा क्योंकि चयन करें अनुवर्ती [8,-8,-1], -1 के योग के साथ। पूर्ण अंतर है |-1 - (-3)| =abs(2) =2, यह न्यूनतम है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • n :=अंकों का आकार

  • x के निरपेक्ष मान प्राप्त करने के बाद -ve मान के आधार पर अंकों को क्रमबद्ध करें

  • neg :=आकार n+1 की एक सरणी बनाएं और 0 से भरें

  • pos :=आकार n+1 की एक सरणी बनाएं और 0 से भरें

  • n-1 से 0 की श्रेणी में i के लिए, 1 से घटाएं, करें

    • अगर अंक [i] <0, तो

      • neg[i] :=neg[i+1] + nums[i]

      • स्थिति[i] :=स्थिति[i+1]

    • अन्यथा,

      • स्थिति[i] :=स्थिति[i+1] + अंक[i]

      • नकारात्मक [i] :=नकारात्मक [i+1]

  • उत्तर :=|लक्ष्य|

  • s :=एक नया सेट उत्तर इसमें 0 डालें

  • फ़ंक्शन चेक() को परिभाषित करें। इसमें a, b

    . लगेगा
  • अगर b <लक्ष्य - उत्तर या लक्ष्य + उत्तर

    • झूठी वापसी

  • सही लौटें

  • मुख्य विधि से, निम्न कार्य करें

  • मैं के लिए 0 से n -1 की सीमा में, करो

    • sl :=x में सभी x के लिए x की एक सूची जब check(x+neg[i], x+pos[i] is true]

    • यदि sl का आकार 0 के समान है, तो

      • लूप से बाहर आएं

    • s :=sl से एक नया सेट

    • एसएल में प्रत्येक एक्स के लिए, करें

      • y:=x + अंक[i]

      • अगर |y - लक्ष्य| <उत्तर, फिर

        • उत्तर :=|y - लक्ष्य|

      • अगर उत्तर 0 के समान है, तो

        • वापसी 0

      • y को s में डालें

  • वापसी उत्तर

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें

from collections import Counter
def solve(nums, goal):
   n = len(nums)
   nums.sort(key=lambda x: -abs(x))
   neg = [0 for _ in range(n+1)]
   pos = [0 for _ in range(n+1)]
   for i in range(n-1, -1, -1):
      if nums[i] < 0:
         neg[i] = neg[i+1] + nums[i]
         pos[i] = pos[i+1]
      else:
         pos[i] = pos[i+1] + nums[i]
         neg[i] = neg[i+1]
   ans = abs(goal)
   s = set([0])
   def check(a, b):
      if b < goal - ans or goal + ans < a:
         return False
      return True
   for i in range(n):
      sl = [x for x in s if check(x+neg[i], x+pos[i])]
      if len(sl) == 0:
         break
      s = set(sl)
      for x in sl:
         y = x + nums[i]
         if abs(y - goal) < ans:
            ans = abs(y - goal)
         if ans == 0:
            return 0
         s.add(y)
   return ans

nums = [8,-8,16,-1]
goal = -3
print(solve(nums, goal))

इनपुट

[0,1,2,3,4], [[3,1],[1,3],[5,6]]

आउटपुट

2

  1. एक सूची का संचयी योग खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें एक सूची दी गई है, हमें संचयी राशि के साथ एक सूची बनानी होगी। आइए अब नीचे दिए गए कार्यान्वयन में समाधान देखें - उदाहरण # cumulative sum def Cumulative(l):    new = []    cumsum = 0   &nb

  1. सूची में तत्वों का योग खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन एक इनपुट के रूप में एक सूची को देखते हुए, हमें दी गई सूची के योग की गणना करने की आवश्यकता है। यहां हमारे पास विचार करने के लिए दो दृष्टिकोण हैं यानी अंतर्निहित फ़ंक्शन का उपयोग करना और ब्रूट-फोर्

  1. सरणी का योग खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम दिए गए समस्या कथन को हल करने के लिए समाधान और दृष्टिकोण के बारे में जानेंगे। समस्या कथन एक इनपुट के रूप में एक सरणी को देखते हुए, हमें दिए गए सरणी के योग की गणना करने की आवश्यकता है। यहां हम ब्रूट-फोर्स अप्रोच का अनुसरण कर सकते हैं, यानी एक सूची को पार करना और प्रत्येक तत्व को एक खा