"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > कोडिंग साक्षात्कार को क्रैक करना: स्लाइडिंग विंडो पैटर्न का हिस्सा

कोडिंग साक्षात्कार को क्रैक करना: स्लाइडिंग विंडो पैटर्न का हिस्सा

2025-03-04 पर पोस्ट किया गया
ब्राउज़ करें:735

] यह तकनीक अविश्वसनीय रूप से उपयोगी है, जिसमें सन्निहित तत्वों के सबार्स या सब्सट्रिंग को शामिल करने वाली समस्याओं को अनुकूलित करने के लिए, जैसे कि अधिकतम राशि, एक अनुक्रम के भीतर विशिष्ट स्थितियों को खोजना, या स्ट्रिंग्स में सब्सट्रिंग्स के साथ काम करना।

शामिल करना। ] Cracking the Coding Interview: Part  The Sliding Window Pattern स्लाइडिंग विंडो पैटर्न का अवलोकन

] हर बार जब आप खिड़की को स्थानांतरित करते हैं, तो सबसेट को पुनर्गठित करने के बजाय, यह तकनीक एक कुल या स्थिति को बनाए रखती है, अनावश्यक कार्य को कम करने के लिए डेटा पर फिसलती है।

स्लाइडिंग विंडो का उपयोग कब करें:

] ] ]

स्लाइडिंग विंडो दृष्टिकोण के प्रकार

1।
फिक्स्ड साइज स्लाइडिंग विंडो
  • "
  • ]
  • ]
  • ] # अधिकतम राशि और वर्तमान विंडो राशि को संग्रहीत करने के लिए चर को आरंभ करें। max_sum = 0 Window_sum = 0 # सबसे पहले, प्रारंभिक विंडो (पहले 'के' तत्वों) के योग की गणना करें। के लिए मैं रेंज (k) में: window_sum = arr [i] # प्रारंभिक विंडो के योग पर MAX_SUM सेट करें। max_sum = window_sum # अब, सरणी के पार खिड़की को स्लाइड करें। # KTH तत्व से शुरू करें और सरणी के अंत तक आगे बढ़ें। के लिए मैं रेंज में (k, len (arr)): # विंडो को उस तत्व को घटाकर स्लाइड करें जो अब खिड़की में नहीं है # (गिरफ्तारी [i - k]) और नए तत्व (गिरफ्तारी [i]) को जोड़ना। window_sum = arr [i] - arr [i - k] # MAX_SUM अपडेट करें यदि वर्तमान विंडो राशि पिछले MAX_SUM से अधिक है। max_sum = max (max_sum, window_sum) # पाया अधिकतम राशि लौटाएं। MAX_SUM लौटाएं

स्पष्टीकरण

:

] ] ]

    2।
  • डायनेमिक स्लाइडिंग विंडो
  • ] विंडो समस्या की आवश्यकताओं के आधार पर फैलता है या अनुबंध करता है (जैसे कि एक राशि या स्थिति को संतुष्ट करना)। ]
  • ]
] # इनिशियलाइज़ वेरिएबल्स: # Window_sum: वर्तमान विंडो के योग को संग्रहीत करने के लिए। # MIN_LENGTH: पाए गए सबसे छोटे सबार्रे की लंबाई को संग्रहीत करने के लिए। # विंडो_स्टार्ट: स्लाइडिंग विंडो का शुरुआती सूचकांक। Window_sum = 0 min_length = float ('inf') # न्यूनतम लंबाई की तुलना करने के लिए बड़ी संख्या के साथ शुरू करें। window_start = 0 # विंडो_ेंड के साथ सरणी पर iterate विंडो की सही सीमा है। Window_end के लिए रेंज (len (arr)) में: # वर्तमान तत्व को Window_sum में जोड़ें। window_sum = arr [window_end] # जबकि वर्तमान विंडो का योग एस से अधिक या बराबर है: जबकि window_sum> = s: # वर्तमान विंडो के आकार की गणना करें और यदि छोटा हो तो Min_length को अपडेट करें। min_length = min (min_length, window_end - window_start 1) # विंडो_स्टार्ट पर तत्व को हटाकर बाईं ओर से खिड़की को सिकोड़ें। window_sum -= arr [window_start] # खिड़की की शुरुआत को दाईं ओर ले जाएं। window_start = 1 # यदि min_length को अपडेट किया गया था, तो इसे वापस करें; अन्यथा, रिटर्न 0 (मतलब कोई वैध सबार्रे नहीं मिला)। Min_length यदि min_length! = फ्लोट ('inf') और 0 रिटर्न

स्पष्टीकरण
:

def max_sum_subarray(arr, k):
    # Initialize variables to store the maximum sum and the current window sum.
    max_sum = 0
    window_sum = 0

    # First, calculate the sum of the initial window (first 'k' elements).
    for i in range(k):
        window_sum  = arr[i]

    # Set the max_sum to the initial window's sum.
    max_sum = window_sum

    # Now, slide the window across the array. 
    # Start from the kth element and move until the end of the array.
    for i in range(k, len(arr)):
        # Slide the window by subtracting the element that is no longer in the window 
        # (arr[i - k]) and adding the new element (arr[i]).
        window_sum  = arr[i] - arr[i - k]

        # Update max_sum if the current window sum is greater than the previous max_sum.
        max_sum = max(max_sum, window_sum)

    # Return the maximum sum found.
    return max_sum

स्लाइडिंग विंडो सॉल्यूशंस को लागू करने के लिए कदम

] ] गतिशील खिड़कियों के लिए, प्रारंभिक स्थिति समस्या के लक्ष्य पर निर्भर करती है।
  • ]
  • निश्चित विंडो आकार के लिए: अगले तत्व को जोड़कर विंडो को शिफ्ट करें और उस तत्व को हटाकर जो अब विंडो में नहीं है। ]
  • ]

स्लाइडिंग विंडो का उपयोग करके सामान्य साक्षात्कार प्रश्न

]
  • ] ]
]

]

  def smallest_subarray_with_sum(arr, S):
    # Initialize variables:
    # window_sum: to store the sum of the current window.
    # min_length: to store the length of the smallest subarray found.
    # window_start: the starting index of the sliding window.
    window_sum = 0
    min_length = float('inf')  # Start with a large number to compare minimum lengths.
    window_start = 0

    # Iterate over the array with window_end being the right boundary of the window.
    for window_end in range(len(arr)):
        # Add the current element to the window_sum.
        window_sum  = arr[window_end]

        # While the current window's sum is greater than or equal to S:
        while window_sum >= S:
            # Calculate the current window size and update min_length if smaller.
            min_length = min(min_length, window_end - window_start   1)

            # Shrink the window from the left by removing the element at window_start.
            window_sum -= arr[window_start]

            # Move the start of the window to the right.
            window_start  = 1

    # If min_length was updated, return it; otherwise, return 0 (meaning no valid subarray was found).
    return min_length if min_length != float('inf') else 0

]

]

  • साक्षात्कार के लिए स्लाइडिंग विंडो हैक
  • ] यह आपको उस सटीक सीमा की पहचान करने में मदद करता है जिसके साथ आप काम कर रहे हैं।
  • ] ] ]

निष्कर्ष

] फिक्स्ड-साइज़ और डायनेमिक स्लाइडिंग विंडो दोनों में महारत हासिल करके, आप समस्याओं की एक विस्तृत श्रृंखला को अधिक कुशलता से निपट सकते हैं।

]
    भाग 3 के लिए बने रहें!
विज्ञप्ति वक्तव्य इस लेख को पुन: प्रस्तुत किया गया है: https://dev.to/zzeroyzz/cracking-the-coding-interview-part-2-the-sliding-window-pattern-520d?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3