DSA Interview Prep · पाठ

हिस्टोग्राम में सबसे बड़ा आयत

बाएँ सीमाओं को ट्रैक करने के लिए मोनोटोनिक स्टैक का उपयोग कीजिए और एक ही पास में हिस्टोग्राम के भीतर आने वाले अधिकतम क्षेत्रफल वाले आयत की गणना कीजिए।

पाठ 2, कुल 4 में से13 चरण

हिस्टोग्राम में सबसे बड़ा आयत, CoddyKit पर DSA Interview Prep का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह DSA Interview Prep सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। DSA Interview Prep पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

समस्या: हिस्टोग्राम में सबसे बड़ा आयत

हिस्टोग्राम में सबसे बड़ा आयत समस्या (LeetCode 84) में गैर-ऋणात्मक पूर्णांकों की एक सरणी दी जाती है, जो हिस्टोग्राम में पट्टियों की ऊँचाइयों को दर्शाती है; प्रत्येक पट्टी की चौड़ाई 1 है। हिस्टोग्राम के भीतर बनाए जा सकने वाले सबसे बड़े आयत का क्षेत्रफल खोजें। आयत को लगातार पट्टियों पर फैला होना चाहिए और उसकी ऊँचाई उसके अंतर्गत आने वाली सबसे छोटी पट्टी से सीमित होती है।

बलपूर्वक समाधान में: प्रत्येक युग्म (i, j) के लिए [i, j] में न्यूनतम ऊँचाई ज्ञात करें और उसे (j - i + 1) से गुणा करें। यह O(n³) है, या पहले से ज्ञात न्यूनतम मानों के साथ O(n²) — दोनों ही बहुत धीमे हैं। मोनोटोनिक स्टैक वाला समाधान O(n) में चलता है।

# Example: heights = [2, 1, 5, 6, 2, 3]
# Rectangles:
# width=1, height=6 at index 3 => area=6
# width=2, height=5 at indices 2-3 => area=10 (maximum!)
# width=6, height=1 across all => area=6
# width=3, height=2 at indices 2-4 => area=6
heights = [2, 1, 5, 6, 2, 3]
print('Heights:', heights)
print('Expected max area: 10 (bars of height 5 and 6, width 2)')

# Brute force for small inputs:
def brute_force(heights):
    n = len(heights)
    max_area = 0
    for i in range(n):
        min_h = heights[i]
        for j in range(i, n):
            min_h = min(min_h, heights[j])
            max_area = max(max_area, min_h * (j - i + 1))
    return max_area

print('Brute force answer:', brute_force(heights))  # 10

मुख्य अंतर्दृष्टि: प्रत्येक पट्टी के आयत को क्या सीमित करता है?

ऊँचाई h वाली प्रत्येक पट्टी i के लिए, वह जिस सबसे बड़े आयत की न्यूनतम ऊँचाई हो सकती है, वह बाईं ओर तब तक फैलता है जब तक h से छोटी पहली पट्टी न मिल जाए और दाईं ओर भी तब तक फैलता है जब तक h से छोटी पहली पट्टी न मिल जाए। चौड़ाई right_boundary - left_boundary - 1 और क्षेत्रफल h × width होता है।

इससे समस्या का नया रूप मिलता है: प्रत्येक पट्टी के लिए उसका पिछला छोटा तत्व (PSE) और अगला छोटा तत्व (NSE) खोजें। बढ़ता हुआ मोनोटोनिक स्टैक ठीक यही गणना करता है। जैसे ही हम पट्टी i पर pop करते हैं (क्योंकि कोई छोटी पट्टी मिल गई है), वर्तमान पट्टी उसका NSE होती है और pop करने के बाद स्टैक का शीर्ष उसका PSE होता है।

heights = [2, 1, 5, 6, 2, 3]
n = len(heights)

# Find PSE and NSE for each bar
pse = [-1] * n   # index of previous smaller element
nse = [n] * n    # index of next smaller element (default: beyond array)

# PSE
stack = []
for i in range(n):
    while stack and heights[stack[-1]] >= heights[i]:
        stack.pop()
    pse[i] = stack[-1] if stack else -1
    stack.append(i)

# NSE
stack = []
for i in range(n - 1, -1, -1):
    while stack and heights[stack[-1]] >= heights[i]:
        stack.pop()
    nse[i] = stack[-1] if stack else n
    stack.append(i)

max_area = 0
for i in range(n):
    width = nse[i] - pse[i] - 1
    area = heights[i] * width
    print(f'Bar {i} (h={heights[i]}): PSE={pse[i]}, NSE={nse[i]}, width={width}, area={area}')
    max_area = max(max_area, area)
print('Max area:', max_area)

मोनोटोनिक स्टैक से एक-चक्र समाधान

ऊपर बताए गए दो-चक्र वाले तरीके को एक ही चक्र में बदला जा सकता है। पट्टियों को बाएँ से दाएँ बढ़ते हुए मोनोटोनिक स्टैक के साथ संसाधित करें। जब पट्टी i स्टैक के शीर्ष से छोटी हो, तो शीर्ष पट्टी को pop करें — निकाली गई पट्टी की ऊँचाई किसी आयत की ऊँचाई होती है, उसकी दाईं सीमा i होती है और उसकी बाईं सीमा नए स्टैक शीर्ष + 1 होती है।

एक सामान्य युक्ति: ऊँचाइयों के अंत में एक विशेष संकेतक 0 को append करें। इससे अंत में सभी पट्टियाँ स्टैक से निकल जाती हैं, भले ही स्वाभाविक रूप से कोई छोटी पट्टी न मिले। विशेष संकेतक के बिना, बचे हुए स्टैक तत्वों के लिए चक्र के बाद अलग से सफाई करनी पड़ती है।

def largest_rectangle(heights):
    stack = []   # monotonic increasing: indices of bars
    max_area = 0
    heights = heights + [0]  # sentinel: forces all bars to be popped

    for i, h in enumerate(heights):
        while stack and heights[stack[-1]] > h:
            height = heights[stack.pop()]       # height of the rectangle
            width = i if not stack else i - stack[-1] - 1  # left boundary
            max_area = max(max_area, height * width)
        stack.append(i)
    return max_area

print(largest_rectangle([2, 1, 5, 6, 2, 3]))  # 10
print(largest_rectangle([2, 4]))               # 4
print(largest_rectangle([1, 1]))               # 2
print(largest_rectangle([0, 9]))               # 9
print(largest_rectangle([6, 7, 5, 2, 4, 5, 9, 3]))  # 16

एक-चक्र एल्गोरिद्म का अनुरेखण

आइए विशेष संकेतक सहित [2, 1, 5, 6, 2, 3, 0] का चरण-दर-चरण अनुरेखण करें:

  • i=0, h=2: 0 डालें। स्टैक: [0]
  • i=1, h=1: 0 को pop करें (h=2, चौड़ाई=1, क्षेत्रफल=2)। स्टैक खाली है, 1 डालें। स्टैक: [1]
  • i=2, h=5: 5>1, 2 डालें। स्टैक: [1,2]
  • i=3, h=6: 6>5, 3 डालें। स्टैक: [1,2,3]
  • i=4, h=2: 3 को pop करें (h=6,चौड़ाई=4-2-1=1,क्षेत्रफल=6), 2 को pop करें (h=5,चौड़ाई=4-1-1=2,क्षेत्रफल=10★), 2>1 होने के कारण रुकें। 4 डालें। स्टैक: [1,4]
  • i=5, h=3: 3>2, 5 डालें। स्टैक: [1,4,5]
  • i=6, विशेष संकेतक h=0: सभी को pop करें और क्षेत्रफल ज्ञात करें...
def largest_rectangle_trace(heights):
    stack = []
    max_area = 0
    hs = heights + [0]

    for i, h in enumerate(hs):
        while stack and hs[stack[-1]] > h:
            top = stack.pop()
            w = i if not stack else i - stack[-1] - 1
            area = hs[top] * w
            print(f'  Pop bar {top} (h={hs[top]}): width={w}, area={area}', end='')
            if area > max_area:
                max_area = area
                print(' *** NEW MAX ***', end='')
            print()
        print(f'i={i} h={h}: push {i}, stack={[hs[s] for s in stack + [i]]}')
        stack.append(i)
    print(f'Max area: {max_area}')
    return max_area

largest_rectangle_trace([2, 1, 5, 6, 2, 3])

चौड़ाई की गणना: i - stack[-1] - 1 क्यों?

जब हम स्टैक से पट्टी j को pop करते हैं, तो हमें पता होता है: j के आयत की दाईं सीमा i है (दाईं ओर j से छोटी पहली पट्टी)। बाईं सीमा pop करने के बाद स्टैक में j के ठीक नीचे वाली पट्टी है — इसे k मान लें। इसलिए चौड़ाई i - k - 1 है (k+1 से i-1 तक की पट्टियाँ, दोनों सीमाएँ सम्मिलित)।

यदि pop करने के बाद स्टैक खाली है, तो j का आयत पूरी बाईं सीमा तक फैला है (सूचकांक 0)। चौड़ाई केवल i है (सूचकांक 0 से i-1 तक, जिनकी ऊँचाई heights[j] से कम नहीं है)। यह विशेष स्थिति है: width = i if not stack else i - stack[-1] - 1।

# Illustrating left/right boundary logic
heights = [1, 3, 5, 2]
# After processing with stack:
# When we pop bar 2 (h=5) at i=3 (h=2):
#   stack after pop = [0, 1]   => left boundary = 1+1=2, right=3-1=2 => width=1
# When we pop bar 1 (h=3) at i=3 (h=2):
#   stack after pop = [0]       => left boundary = 0+1=1, right=3-1=2 => width=2
# etc.

def compute_boundaries(heights):
    hs = heights + [0]
    stack = []
    for i, h in enumerate(hs):
        while stack and hs[stack[-1]] > h:
            top = stack.pop()
            if stack:
                left = stack[-1] + 1
                width = i - stack[-1] - 1
            else:
                left = 0
                width = i
            print(f'Bar {top} (h={hs[top]}): extends from {left} to {i-1}, width={width}')
        stack.append(i)

compute_boundaries([2, 1, 5, 6, 2, 3])

द्विआधारी मैट्रिक्स में अधिकतम आयत

अधिकतम आयत (LeetCode 85) हिस्टोग्राम समस्या को द्वि-आयामी बाइनरी मैट्रिक्स तक विस्तृत करती है। प्रत्येक पंक्ति के लिए, प्रत्येक खाने के ऊपर लगातार आने वाले 1 की ऊँचाई ज्ञात करें। इससे उस पंक्ति के लिए एक हिस्टोग्राम बनता है। प्रत्येक पंक्ति के हिस्टोग्राम पर हिस्टोग्राम में सबसे बड़े आयत वाला एल्गोरिद्म लागू करें। सभी पंक्तियों में प्राप्त अधिकतम मान ही उत्तर है।

इससे द्वि-आयामी समस्या को n बार दोहराई जाने वाली एक-आयामी हिस्टोग्राम समस्याओं में बदला जा सकता है। m पंक्तियों और n स्तंभों वाली मैट्रिक्स के लिए समय जटिलता O(m × n) है — प्रत्येक पंक्ति के लिए एक हिस्टोग्राम चक्र, और प्रत्येक चक्र O(n) का।

def maximal_rectangle(matrix):
    if not matrix or not matrix[0]:
        return 0
    n = len(matrix[0])
    heights = [0] * n
    max_area = 0

    def hist_max_area(h):
        stack, area = [], 0
        for i, hh in enumerate(h + [0]):
            while stack and h[stack[-1]] > hh:
                top = stack.pop()
                w = i if not stack else i - stack[-1] - 1
                area = max(area, h[top] * w)
            stack.append(i)
        return area

    for row in matrix:
        for j in range(n):
            heights[j] = heights[j] + 1 if row[j] == '1' else 0
        max_area = max(max_area, hist_max_area(heights[:]))
    return max_area

matrix = [['1','0','1','0','0'],
          ['1','0','1','1','1'],
          ['1','1','1','1','1'],
          ['1','0','0','1','0']]
print(maximal_rectangle(matrix))  # 6

हिस्टोग्राम समस्याओं में सीमांत स्थितियाँ

ध्यान रखने योग्य महत्वपूर्ण सीमांत स्थितियाँ:

  • सभी पट्टियों की ऊँचाई समान: पूरी सरणी एक आयत बनाती है; उत्तर = n × ऊँचाई
  • क्रमशः बढ़ती हुई: विशेष संकेतक आने तक कोई pop नहीं होता; अंतिम पट्टी का क्षेत्रफल अधिकतम होता है
  • एक पट्टी: उत्तर = ऊँचाई[0]
  • 0 ऊँचाई वाली पट्टियाँ: वे स्वाभाविक विशेष संकेतकों की तरह काम करती हैं और हिस्टोग्राम को स्वतंत्र खंडों में बाँट देती हैं

अंत में विशेष संकेतक (0 जोड़ना) क्रमशः बढ़ती हुई स्थिति को संभालता है और अंत में बची हुई सभी पट्टियों को pop करने के लिए बाध्य करता है। इसके बिना, मुख्य चक्र के बाद अलग से सफाई चक्र चलाना पड़ता है।

def largest_rectangle(heights):
    stack = []
    max_area = 0
    heights = heights + [0]
    for i, h in enumerate(heights):
        while stack and heights[stack[-1]] > h:
            top = stack.pop()
            w = i if not stack else i - stack[-1] - 1
            max_area = max(max_area, heights[top] * w)
        stack.append(i)
    return max_area

# Edge cases
print(largest_rectangle([5, 5, 5, 5]))    # 20 (all same)
print(largest_rectangle([1, 2, 3, 4, 5])) # 9 (increasing: 3*3)
print(largest_rectangle([5, 4, 3, 2, 1])) # 9 (decreasing: 3*3)
print(largest_rectangle([5]))              # 5 (single bar)
print(largest_rectangle([0, 0, 0]))        # 0 (all zero)
print(largest_rectangle([3, 0, 3]))        # 3 (zero splits)

विभाजित करें और जीतें: एक वैकल्पिक विधि

हिस्टोग्राम समस्या को विभाजित करें और जीतें विधि से भी हल किया जा सकता है: न्यूनतम ऊँचाई वाली पट्टी पर विभाजन करें, दोनों हिस्सों को पुनरावर्ती रूप से हल करें और न्यूनतम ऊँचाई का उपयोग करके पूरी चौड़ाई में फैले आयत से तुलना करें। इससे औसत स्थिति में O(n log n), लेकिन क्रमबद्ध आगत मानों के लिए सबसे खराब स्थिति में O(n²) समय लगता है।

O(n) की सबसे खराब स्थिति के साथ मोनोटोनिक स्टैक वाला तरीका निश्चित रूप से बेहतर है। फिर भी, विभाजित-करें-और-जीतें तरीके को समझने से समस्या की अंतर्दृष्टि गहरी होती है और यह स्पष्ट होता है कि किसी भी खंड में न्यूनतम ऊँचाई वाली पट्टी पूरे खंड में फैले आयत के लिए हमेशा सीमित कारक क्यों होती है।

def largest_rectangle_dc(heights, lo=0, hi=None):
    if hi is None:
        hi = len(heights) - 1
    if lo > hi:
        return 0
    # Find the index of the minimum height in [lo, hi]
    min_idx = lo
    for i in range(lo, hi + 1):
        if heights[i] < heights[min_idx]:
            min_idx = i
    # Three options:
    # 1. Max rect entirely in left half
    # 2. Max rect entirely in right half
    # 3. Max rect spanning entire [lo, hi] with height = min
    full_width_area = heights[min_idx] * (hi - lo + 1)
    left_area  = largest_rectangle_dc(heights, lo, min_idx - 1)
    right_area = largest_rectangle_dc(heights, min_idx + 1, hi)
    return max(full_width_area, left_area, right_area)

print(largest_rectangle_dc([2, 1, 5, 6, 2, 3]))  # 10

हिस्टोग्राम पैटर्न: उप-सरणियों की संख्या

इसी स्टैक तकनीक से जुड़ी एक समस्या: हिस्टोग्राम में उन उप-सरणियों की संख्या गिनें जिनका न्यूनतम तत्व किसी दिए गए लक्ष्य के बराबर है। इसका उत्तर प्रत्येक पट्टी के लिए PSE और NSE ज्ञात करके तथा (i - pse[i]) × (nse[i] - i) सूत्र का उपयोग करके मिलता है। यह सूत्र उन उप-हिस्टोग्रामों की संख्या गिनता है जिनमें पट्टी i न्यूनतम है।

यह बाएँ की संख्या × दाएँ की संख्या वाली तकनीक कई LeetCode समस्याओं में दिखाई देती है: उप-सरणियों के न्यूनतम तत्वों का योग (907), सभी अलग-अलग वर्णों वाली उप-स्ट्रिंग की संख्या और योगदान-तकनीक वाली समस्याएँ। मोनोटोनिक स्टैक O(n) में PSE और NSE की गणना करता है, जिससे प्रत्येक तत्व के योगदान की गणना O(1) में संभव होती है।

def sum_of_subarray_minimums(arr):
    n = len(arr)
    pse = [-1] * n   # previous strictly smaller element
    nse = [n] * n    # next smaller or equal element

    stack = []
    for i in range(n):
        while stack and arr[stack[-1]] >= arr[i]:
            stack.pop()
        pse[i] = stack[-1] if stack else -1
        stack.append(i)

    stack = []
    for i in range(n - 1, -1, -1):
        while stack and arr[stack[-1]] > arr[i]:
            stack.pop()
        nse[i] = stack[-1] if stack else n
        stack.append(i)

    MOD = 10**9 + 7
    total = 0
    for i in range(n):
        left_count = i - pse[i]          # subarrays where i is leftmost min
        right_count = nse[i] - i        # subarrays where i is the min
        total += arr[i] * left_count * right_count
    return total % MOD

print(sum_of_subarray_minimums([3, 1, 2, 4]))  # 17
print(sum_of_subarray_minimums([11, 81, 94, 43, 3]))  # 444

व्यावहारिक साक्षात्कार सुझाव

साक्षात्कार में हिस्टोग्राम की समस्या देखते समय, इस जाँच-सूची का पालन करें:

  1. स्पष्ट करें: क्या ऊँचाइयाँ 0 हो सकती हैं? परिणाम क्या होना है — क्षेत्रफल, सूचकांक या संख्या?
  2. सरल पूर्ण-जाँच तरीके से शुरू करें और O(n²) या O(n³) जटिलता बताएँ
  3. उल्लेख करें कि प्रत्येक स्तंभ का योगदान निकटतम छोटे स्तंभ तक उसके बाएँ और दाएँ विस्तार पर निर्भर करता है
  4. PSE/NSE → मोनोटोनिक स्टैक → O(n) समाधान प्रस्तुत करें
  5. प्रहरी-मान वाली तरकीब (append 0) संभालें ताकि कोड सरल हो
  6. व्हाइटबोर्ड पर एक छोटे उदाहरण को चरण-दर-चरण समझाएँ

सामान्य अगला प्रश्न: इसे 2D (अधिकतम आयत) तक विस्तारित करें। दिखाएँ कि इसे n हिस्टोग्राम समस्याओं में बदला जा सकता है, जिनमें प्रत्येक O(n) की है, इसलिए कुल O(m×n) मिलता है।

# Final clean solution for interview
def largest_rectangle_in_histogram(heights):
    stack = []
    max_area = 0
    for i, h in enumerate(heights + [0]):  # sentinel forces final pops
        while stack and heights[stack[-1]] > h:
            height = heights[stack.pop()]
            width = i if not stack else i - stack[-1] - 1
            max_area = max(max_area, height * width)
        stack.append(i)
    return max_area

# Verify all test cases from earlier
test_cases = [
    ([2, 1, 5, 6, 2, 3], 10),
    ([6, 7, 5, 2, 4, 5, 9, 3], 16),
    ([1], 1),
    ([2, 0, 2], 2),
    ([], 0),
]
for heights, expected in test_cases:
    if not heights:
        result = 0
    else:
        result = largest_rectangle_in_histogram(heights)
    status = 'PASS' if result == expected else 'FAIL'
    print(f'{status}: {heights} => {result} (expected {expected})')

उपसरणी परासों का योग और इसी प्रकार के अन्य रूप

PSE/NSE तकनीक कई LeetCode समस्याओं पर भी लागू होती है। उपसरणी परासों का योग (2104) में सभी उपसरणियों के लिए (max - min) का योग निकालना होता है। यह (उपसरणी अधिकतमों के योग) में से (उपसरणी न्यूनतमों के योग) घटाने के बराबर है; दोनों की गणना O(n) में मोनोटोनिक स्टैक से की जाती है। कतार में दिखाई देने वाले लोगों की संख्या (1944) में घटते हुए स्टैक का उपयोग होता है, जहाँ प्रत्येक pop एक दिखाई देने वाले व्यक्ति की गिनती करता है। समस्याओं के इस परिवार को पहचानने के लिए वाक्यांश पर ध्यान दें: 'प्रत्येक तत्व के लिए, वह कितनी दूर तक अपना प्रभुत्व रख सकता है?' — इसका उत्तर हमेशा मोनोटोनिक स्टैक के साथ PSE/NSE होता है।

def sum_subarray_ranges(nums):
    n = len(nums)
    # Sum of subarray max - sum of subarray min
    def contrib(arr, is_max):
        # Count contribution of each element as max (or min)
        n = len(arr)
        left = [0]*n; right = [0]*n
        stack = []
        for i in range(n):
            while stack and (arr[stack[-1]] < arr[i] if is_max else arr[stack[-1]] > arr[i]):
                stack.pop()
            left[i] = i - (stack[-1] if stack else -1)
            stack.append(i)
        stack = []
        for i in range(n-1, -1, -1):
            while stack and (arr[stack[-1]] <= arr[i] if is_max else arr[stack[-1]] >= arr[i]):
                stack.pop()
            right[i] = (stack[-1] if stack else n) - i
            stack.append(i)
        return sum(arr[i] * left[i] * right[i] for i in range(n))
    return contrib(nums, True) - contrib(nums, False)

print(sum_subarray_ranges([1, 2, 3]))    # 4
print(sum_subarray_ranges([1, 3, 3]))    # 4
print(sum_subarray_ranges([4, -2, -3, 4, 1]))  # 59

त्वरित जाँच

इस पाठ में सिखाई गई डेटा संरचनाएँ और एल्गोरिदम — कोडिंग साक्षात्कार की तैयारी की अवधारणाओं की अपनी समझ का परीक्षण करें।

पाठ का पुनरावलोकन

इस पाठ में आपने सीखा: प्रत्येक स्तंभ के लिए, उसे समेटने वाले सबसे बड़े आयत की सीमाएँ दोनों ओर के निकटतम छोटे स्तंभ द्वारा निर्धारित होती हैं (PSE और NSE), एक मोनोटोनिक रूप से बढ़ता स्टैक एक O(n) पास में सभी PSE/NSE सीमाओं की गणना करता है, क्योंकि स्तंभ हटाते समय दोनों सीमाएँ मिल जाती हैं, और प्रहरी-मान 0 जोड़ने से स्टैक से सभी स्तंभ हट जाते हैं, जिससे कोड एकल लूप में सरल हो जाता है। अब हम O(n) में स्लाइडिंग विंडो का अधिकतम निकालने के लिए मोनोटोनिक डेक का उपयोग करेंगे।

शुरुआत निःशुल्क

एआई शिक्षक के साथ Python सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
30
पाठ
120

अक्सर पूछे जाने वाले प्रश्न

क्या “हिस्टोग्राम में सबसे बड़ा आयत” पाठ निःशुल्क है?

हाँ — DSA Interview Prep अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “हिस्टोग्राम में सबसे बड़ा आयत” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। DSA Interview Prep पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“हिस्टोग्राम में सबसे बड़ा आयत” में मैं क्या सीखूँगा?

बाएँ सीमाओं को ट्रैक करने के लिए मोनोटोनिक स्टैक का उपयोग कीजिए और एक ही पास में हिस्टोग्राम के भीतर आने वाले अधिकतम क्षेत्रफल वाले आयत की गणना कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ DSA Interview Prep का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या DSA Interview Prep शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर DSA Interview Prep शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“हिस्टोग्राम में सबसे बड़ा आयत” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस DSA Interview Prep पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर DSA Interview Prep पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. मोनोटोनिक स्टैक: बढ़ता बनाम घटता
  2. हिस्टोग्राम में सबसे बड़ा आयत
  3. मोनोटोनिक डेक के साथ स्लाइडिंग विंडो अधिकतम
  4. वर्षा जल संग्रहण: स्टैक और दो पॉइंटर
← DSA Interview Prep पर वापस जाएँ