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

दिए गए दो सरणियों से उप-सरणी खोजें जैसे कि उनके पास पायथन में समान योग है


मान लीजिए कि हमारे पास दो सरणियाँ P और Q हैं जिनका आकार N है, वे संख्या 1 से N तक धारण कर रहे हैं। हमें दिए गए सरणियों से उप-सरणी ढूंढनी है ताकि उनका योग समान हो। अंत में ऐसे उप-सरणी के सूचकांक वापस करें। अगर कोई समाधान नहीं है, तो -1 लौटें।

इसलिए, यदि इनपुट P =[2, 3, 4, 5, 6], Q =[9, 3, 2, 6, 5] जैसा है, तो आउटपुट पहले इंडेक्स होगा। सरणी:0, 1, 2 और दूसरी सरणी में सूचकांक:0, इसलिए P[0..2] =2 + 3 + 4 =9 और Q[0] =9.

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

  • एक फ़ंक्शन को परिभाषित करें get_subarray() । यह P, Q, स्वैप लेगा

  • N:=P का आकार

  • अनुक्रमणिका :=एक नया नक्शा

  • अंतर:=0, जे:=0

  • index[0] :=एक जोड़ी जैसे (-1, -1)

  • मेरे लिए 0 से N की सीमा में, करें

    • जबकि Q[j]

      • जे:=जे + 1

    • अंतर:=क्यू[जे] - पी[i]

    • यदि सूचकांक में अंतर मौजूद है, तो

      • अगर अदला-बदली सही है, तो

        • आईडीएक्स:=सूचकांक [क्यू [जे] - पी [i]]

        • P के लिए idx[1] + 1 से j तक सभी मान प्रदर्शित करें

        • Q

          . के लिए idx[0] + 1 से i तक के सभी मान प्रदर्शित करें
      • अन्यथा,

        • आईडीएक्स:=सूचकांक [क्यू [जे] - पी [i]]

        • P के लिए idx[0] + 1 से i तक के सभी मान प्रदर्शित करें

        • Q

          . के लिए idx[1] + 1 से j तक सभी मान प्रदर्शित करें
      • वापसी

    • अनुक्रमणिका [अंतर] :=(i, j)

  • डिस्प्ले -1

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

  • P और Q को उनकी संचयी राशि का उपयोग करके अपडेट करें

  • N:=P का आकार

  • अगर क्यू [एन -1]> पी [एन -1], तो

    • get_subarray(P, Q, False)

  • अन्यथा,

    • get_subarray(Q, P, True)

उदाहरण

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

def show_res(x, y, num):
   print("Indices of array", num, ":", end = " ")
   for i in range(x, y):
      print(i, end = ", ")
   print(y)
def get_subarray(P, Q, swap):
   N = len(P)
   index = {}
   difference, j = 0, 0
   index[0] = (-1, -1)
   for i in range(0, N):
      while Q[j] < P[i]:
         j += 1
      difference = Q[j] - P[i]
      if difference in index:
         if swap:
            idx = index[Q[j] - P[i]]
            show_res(idx[1] + 1, j, 1)
            show_res(idx[0] + 1, i, 2)
         else:
            idx = index[Q[j] - P[i]]
            show_res(idx[0] + 1, i, 1)
            show_res(idx[1] + 1, j, 2)
         return
      index[difference] = (i, j)
   print(-1)
def cumsum(arr):
   n = len(arr)
   for i in range(1, n):
      arr[i] += arr[i - 1]
P = [2, 3, 4, 5, 6]
Q = [9, 3, 2, 6, 5]
cumsum(P)
cumsum(Q)
N = len(P)
if Q[N - 1] > P[N - 1]:
   get_subarray(P, Q, False)
else:
   get_subarray(Q, P, True)

इनपुट

[2, 3, 4, 5, 6],[9, 3, 2, 6, 5]

आउटपुट

Indices of array 1 : 0, 1, 2
Indices of array 2 : 0

  1. दिए गए योग के साथ जोड़े खोजें जैसे कि जोड़ी तत्व पायथन में अलग-अलग बीएसटी में हों दिए गए योग के साथ जोड़े खोजें जैसे कि जोड़ी तत्व पायथन में अलग-अलग बीएसटी में हों

    मान लीजिए कि हमारे पास दो दिए गए बाइनरी सर्च ट्री हैं और दूसरा योग दिया गया है; हमें दिए गए योग के संबंध में जोड़े खोजने होंगे ताकि प्रत्येक जोड़ी तत्व अलग-अलग बीएसटी में हों। तो, अगर इनपुट योग =12 जैसा है तो आउटपुट [(6, 6), (7, 5), (9, 3)] . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  1. - दिए गए योग के साथ जोड़े खोजें जैसे कि जोड़ी के तत्व पायथन में अलग-अलग पंक्तियों में हों

    मान लीजिए कि हमारे पास अद्वितीय तत्वों का एक मैट्रिक्स और एक योग है; हमें मैट्रिक्स से उन सभी जोड़ों को खोजना है जिनका योग दिए गए योग के बराबर है। यहां, जोड़ी के प्रत्येक तत्व को अलग-अलग पंक्तियों से लिया जाएगा। तो, अगर इनपुट इस तरह है - 2 4 3 5 6 9 8 7 10 11 14 12 13 1 15 16 sum =13, तो आउटप

  1. दो क्रमबद्ध सरणियों से निकटतम जोड़ी खोजने के लिए पायथन कार्यक्रम दो क्रमबद्ध सरणियों से निकटतम जोड़ी खोजने के लिए पायथन कार्यक्रम

    इस लेख में, हम नीचे दिए गए समस्या कथन के समाधान के बारे में जानेंगे। समस्या कथन - हमें दो सरणियाँ दी गई हैं, हमें दो क्रमबद्ध सरणियों से निकटतम जोड़ी खोजने की आवश्यकता है आइए अब नीचे दिए गए कार्यान्वयन में समाधान देखें - उदाहरण # sys module import sys # pair def print_(ar1, ar2, m, n, x):