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

पायथन में किसी भी संख्या और उसकी अगली छोटी संख्या का अधिकतम अंतर खोजने का कार्यक्रम

मान लीजिए कि हमारे पास संख्याओं की एक सूची है जिसे अंक कहा जाता है, हमें किसी भी संख्या और अगली छोटी संख्या के बीच मौजूद अधिकतम अंतर को खोजना होगा। हमारा लक्ष्य इसे रैखिक समय में हल करना है।

इसलिए, यदि इनपुट संख्या =[14, 2, 6, 35, 12] की तरह है, तो आउटपुट 21 होगा, क्योंकि 35 और 14 में 21 का सबसे बड़ा अंतर है।

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

  • max_val :=अधिकतम अंक, min_val :=न्यूनतम अंक

  • अगर max_val min_val के समान है, तो

    • वापसी 0

  • डेल्टा:=(max_val - min_val) / (अंकों का आकार -1)

  • min_map :=एक खाली नक्शा (यदि कुछ मान इंफ के रूप में वापसी मूल्य नहीं हैं)

  • max_map :=एक खाली नक्शा (यदि कुछ मान −inf के रूप में वापसी मूल्य नहीं हैं)

  • रेस:=0, आईडीएक्स:=0

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

    • idx :=((संख्या - min_val) / डेल्टा) का तल

    • max_map[idx] :=max_map[idx] और num का अधिकतम

    • min_map[idx] :=न्यूनतम min_map[idx] और num

  • पिछला :=min_val

  • मैं के लिए 0 से लेकर अंकों के आकार -1 तक के लिए, करें

    • अगर min_map[i] inf जैसा नहीं है, तो

      • रेस :=अधिकतम रेस और (min_map[i] - पिछला)

      • पिछला :=max_map[i]

  • रिटर्न रेस

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

उदाहरण

from collections import defaultdict
import math
class Solution:
   def solve(self, nums):
      max_val = max(nums)
      min_val = min(nums)
      if max_val == min_val:
         return 0
      delta = (max_val − min_val) / (len(nums) − 1)
      min_map = defaultdict(lambda: float("inf"))
      max_map = defaultdict(lambda: float("−inf"))
      res = 0
      idx = 0
      for num in nums:
         idx = math.floor((num − min_val) / delta)
         max_map[idx] = max(max_map[idx], num)
         min_map[idx] = min(min_map[idx], num)
      prev = min_val
      for i in range(len(nums)):
         if min_map[i] != float("inf"):
            res = max(res, min_map[i] − prev)
            prev = max_map[i]
      return res
ob = Solution()
nums = [14, 2, 6, 35, 12]
print(ob.solve(nums))

इनपुट

[14, 2, 6, 35, 12]

आउटपुट

21

  1. पायथन में नोड और वंशज के बीच अंतर खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, हमें किसी भी नोड और उसके वंशजों के बीच सबसे बड़ा निरपेक्ष अंतर खोजना होगा। तो, अगर इनपुट पसंद है तो आउटपुट 7 होगा क्योंकि नोड्स 8 और 1 के बीच सबसे बड़ा पूर्ण अंतर है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक फ़ंक्शन को परिभाषित करें dfs() ।

  1. पायथन में i, j और k संख्या x, y, z अक्षरों के साथ बाद की संख्या खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास x, y और z s के साथ एक स्ट्रिंग है, हमें बाद की संख्या ज्ञात करनी है जिसमें x वर्णों की संख्या है, उसके बाद y वर्णों की j संख्या और उसके बाद k z वर्णों की संख्या जहाँ i, j, k 1. इसलिए, यदि इनपुट s =xxyz जैसा है, तो आउटपुट 3 होगा, क्योंकि हम दो xyz और एक xxyz बना सकते हैं इसे

  1. पायथन में निकटतम बाएँ और दाएँ छोटे तत्वों के बीच अधिकतम अंतर खोजें

    मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है; हमें सरणी में प्रत्येक तत्व के निकटतम बाएँ और दाएँ छोटे तत्व के बीच अधिकतम पूर्ण अंतर खोजना होगा। यदि किसी तत्व के दायीं ओर या बायीं ओर कोई छोटा तत्व नहीं है तो हम शून्य को छोटे तत्व के रूप में रखेंगे। इसलिए, यदि इनपुट ए =[3, 5, 9, 8, 8, 10, 4] जैसा