Menu
CoddyTech
flag Ar iconالعربيةdown icon

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: يحتجز وحدتين فوق الحاجز ذي الارتفاع 1، و3 فوق الحاجز ذي الارتفاع 0، ووحدة واحدة فوق الحاجز ذي الارتفاع 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