Menu
CoddyTech

Trapping Rain Water

שורה של עמודות ניצבת זו לצד זו, רוחב כל אחת מהן יחידה אחת: height[i] הוא הגובה של עמודה i. גשם יורד על השורה ונאגר בשקעים שבין העמודות. מים נשארים מעל עמודה רק אם יש עמודה גבוהה יותר משמאל לה וגם עמודה גבוהה יותר מימין לה; מעבר לעמודה הראשונה והאחרונה הם זורמים החוצה.

החזירו את המספר הכולל של ריבועי יחידה של מים שהשורה מכילה.

פונקציה

trap(height: integer-array) → integer
heightinteger-array
הגובה של כל עמודה, משמאל לימין
מחזירהinteger
כמות יחידות המים הכוללת שנלכדה

אילוצים

  • 1 ≤ height.length ≤ 2 × 104
  • 0 ≤ height[i] ≤ 105
  • כל עמודה היא ברוחב יחידה אחת, והמים אינם נשארים מעבר לעמודה הראשונה או האחרונה.

דוגמאות

קלט
height = [0, 3, 1, 0, 2, 5, 1, 2]
פלט
7
הסבר
בין ה־3 ל־5 המים עולים לגובה 3: הם מכילים 2 יחידות מעל העמודה בגובה 1, 3 מעל זו שבגובה 0 ו־1 מעל זו שבגובה 2. ה־1 שליד הסוף נמצא בין 5 ל־2, לכן הגובה שלו הוא 2 והוא מכיל יחידה אחת. 2 + 3 + 1 + 1 = 7.

lock icon+17 בדיקות נסתרות בשליחה

challenge icon

שאלת המשך

נניח שהמוטות יוצרים רשת דו־ממדית של גבהים, ומים יכולים לזרום החוצה בכל ארבעת הכיוונים. איך הייתם סופרים את המים הכלואים במקרה כזה?

איפוס הקוד
def trap(height):
    # כתבו כאן את הקוד
מקרי בדיקה

מקרה 1

מקרה 2

מקרה 3

קלט

height = [0, 3, 1, 0, 2, 5, 1, 2]

צפוי

7