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

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

मान लीजिए कि हमारे पास एक सरणी संख्या है, और एक अन्य सरणी अनुरोध कहा जाता है जहां अनुरोध [i] =[start_i, end_i], यह ith अनुरोध का प्रतिनिधित्व करता है जो अंकों के योग के लिए पूछता है [start_i] + अंक [start_i + 1] + ... + अंक [end_i-1] + अंक [end_i]। हमें अंकों के सभी क्रमपरिवर्तनों के बीच सभी अनुरोधों का अधिकतम कुल योग ज्ञात करना है। उत्तर बहुत बड़ा हो सकता है, इसलिए इसे मॉड्यूलो 10^9+7 लौटाएं।

इसलिए, यदि इनपुट अंकों की तरह है =[10,20,30,40,50] अनुरोध =[[1,3], [0,1]], तो आउटपुट 190 होगा, क्योंकि अगर हम [30] की तरह व्यवस्था करते हैं ,50,40,20,10] हम प्राप्त करते हैं:अनुरोधों से [0]:अंक [1] + अंक [2] + अंक [3] =50 + 40 + 20 =110, और अनुरोधों से [1]:अंक [ 0] + अंक [1] =30 + 50 =80, तो कुल योग 110+80 =190।

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

  • A :=एक नई सूची
  • अनुरोधों में प्रत्येक अनुरोध (एस, ई) के लिए, करें
    • ए के अंत में जोड़ी (ओं, 0) डालें
    • ए के अंत में जोड़ी (ई, 1) डालें
  • सूची A को क्रमित करें
  • fr :=एक खाली नक्शा
  • सीएनटी:=0
  • n :=A का आकार
  • मैं :=0
  • जबकि मैं
  • r :=1
  • जबकि i
  • r :=r + 1
  • i :=i + 1
  • सीएनटी:=सीएनटी + आर
  • यदि cnt - r> 0, तो
      fr[cnt-r]
        . के अंत में
      • सम्मिलित करें (पूर्व, p-1)
      • पूर्व :=p
  • अन्यथा जब ध्वज 1 के समान हो, तो
    • सीएनटी:=सीएनटी - आर
    • fr[cnt+r] के अंत में
    • सम्मिलित करें (पूर्व, p)
    • पूर्व :=p+1
  • i :=i + 1
  • सूची संख्याओं को उल्टे क्रम में क्रमित करें
  • ks :=fr की सभी कुंजियों की सूची से एक नई सूची
  • सूची को उल्टे क्रम में क्रमित करें
  • उत्तर:=0
  • म :=10^9 + 7
  • मैं :=0
  • केएस में प्रत्येक के लिए, करें
    • प्रत्येक जोड़ी (एस, ई) के लिए fr[k], do
      • d :=e - s + 1
      • उत्तर:=उत्तर + (अंकों के सभी तत्वों का योग [सूचकांक i से i+d-1] तक) * k
      • उत्तर:=उत्तर मॉड एम
      • i :=i + d
  • वापसी उत्तर
  • उदाहरण

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

    from collections import defaultdict
    def solve(nums, requests):
       A = []
       for s, e in requests:
          A.append((s, 0))
          A.append((e, 1))
       A.sort()
       fr = defaultdict(list)
       cnt = 0
    
       n = len(A)
       i = 0
       while i < n:
          r = 1
          while i < n - 1 and A[i+1] == A[i]:
             r += 1
             i += 1
          p, flag = A[i]
          if flag == 0:
             cnt += r
             if cnt - r > 0:
                fr[cnt-r].append((pre, p-1))
             pre = p
          elif flag == 1:
             cnt -= r
             fr[cnt+r].append((pre, p))
             pre = p+1
          i += 1
    
       nums.sort(reverse=True)
       ks = list(fr.keys())
       ks.sort(reverse=True)
       ans = 0
       m = 10**9 + 7
       i = 0
       for k in ks:
          for s, e in fr[k]:
             d = e - s + 1
             ans += sum(nums[i:i+d]) * k
             ans %= m
             i += d
       return ans
    
    nums = [10,20,30,40,50]
    requests = [[1,3],[0,1]]
    print(solve(nums, requests))

    इनपुट

    [10,20,30,40,50],[[1,3],[0,1]]

    आउटपुट

    190

    1. पायथन प्रोग्राम में सरणी का योग ज्ञात करें

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

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

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

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

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