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

पायथन में पहले N प्राकृतिक संख्याओं के क्रमचय में माध्यिका M वाले उप-सरणियों की संख्या खोजें


मान लीजिए हमारे पास एक ऐरे A है जिसमें पहले N प्राकृतिक संख्याओं का क्रमचय है और एक अन्य संख्या M भी दी गई है, जहां M ≤ N। हमें उन उप-सरणियों की संख्या ढूंढनी है जिनकी माध्यिका M है। जैसा कि हम जानते हैं, एक क्रम की माध्यिका को उस तत्व के मान के रूप में परिभाषित किया जाता है जो आरोही क्रम में क्रम को सॉर्ट करने के बाद बीच में होता है। सम लंबाई के क्रम के लिए, दो मध्य तत्वों में से बाएं वाले का उपयोग किया जाता है।

इसलिए, यदि इनपुट A = [3, 5, 6, 4, 2] और M = 5 है, तो आउटपुट 4 होगा क्योंकि आवश्यक उप-सरणियां हैं: [3, 5, 6], [5], [5, 6] और [5, 6, 4]।

समाधान दृष्टिकोण

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

  • n := len(arr)
  • my_map := {}
  • my_map[0] := 1
  • has := False, add := 0, result := 0
  • i को 0 से n-1 तक के लिए:
    • यदि arr[i] < m, तो add := add - 1
    • अन्यथा यदि arr[i] > m, तो add := add + 1
    • यदि arr[i] == m, तो has := True
    • यदि has true है:
      • यदि add my_map में मौजूद है, तो result := result + my_map[add]
      • यदि add-1 my_map में मौजूद है, तो result := result + my_map[add - 1]
    • अन्यथा:
      • my_map[add] := my_map.get(add, 0) + 1
  • result लौटाएं।

उदाहरण

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

def solve(arr, m):
    n = len(arr)
    my_map = {}
    my_map[0] = 1
    has = False
    add = 0
    result = 0
    for i in range(n):
        if arr[i] < m:
            add -= 1
        elif arr[i] > m:
            add += 1
        if arr[i] == m:
            has = True
        if has:
            if add in my_map:
                result += my_map[add]
            if add - 1 in my_map:
                result += my_map[add - 1]
        else:
            my_map[add] = my_map.get(add, 0) + 1
    return result

arr = [3, 5, 6, 4, 2]
m = 5
print(solve(arr, m))

इनपुट

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

आउटपुट

3
  1. - पायथन में रिकर्सन का उपयोग करके प्राकृतिक संख्याओं का योग कैसे खोजें?

    यदि कोई फ़ंक्शन स्वयं को कॉल करता है, तो उसे रिकर्सिव फ़ंक्शन कहा जाता है। इसे अनंत लूप में पड़ने से रोकने के लिए, रिकर्सिव कॉल को कंडीशनल स्टेटमेंट में रखा जाता है। निम्न प्रोग्राम यूज़र से इनपुट के रूप में संख्या स्वीकार करता है और इसे rsum() फ़ंक्शन को आर्गुमेंट के रूप में भेजता है। यह प्रत्येक

  1. - Python का उपयोग करके प्राकृतिक संख्याओं का योग कैसे खोजें?

    Python में प्राकृतिक संख्याओं का योग आप एक वेरिएबल i के मान को एक से क्रमिक रूप से बढ़ाने और संचयी रूप से जोड़ने के लिए while लूप का उपयोग कर सकते हैं। s, i = 0, 0 n = 10 while i < n: i = i + 1 s = s + i print(पहली 10 प्राकृतिक संख्याओं का योग, s) फॉर लूप का उपयोग प्राकृतिक संख्याओं की रें

  1. - Python में संख्याओं की सूची में सबसे बड़ी संख्या कैसे खोजें?

    Python में सूची से अधिकतम संख्या खोजना Python की बिल्ट-इन लाइब्रेरी फ़ंक्शन max() एक इटरेबल या कॉमा सेपरेटेड संख्याओं की सूची में सबसे बड़ी संख्या लौटाता है। >>> max(10, 23, 43, 21) 43 >>> l1 = [4, 7, 2, 9, 1] >>> max(l1) 9