首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode 42 Trapping Rain Water:雙指針 / 分治法計算接雨水量

     編輯:關於C++

題目大意

給定非負整數數組 height 代表柱狀圖高度,寬度均為 1。計算下雨後能接住的雨水總量。
例:[0,1,0,2,1,0,1,3,2,1,2,1] → 6。

核心觀察:水位由雙側最高柱決定

對位置 i,能接住的水高 = min(maxLeft[i], maxRight[i]) - height[i](若為負則為 0)。
maxLeft[i] = i 左側(含 i)最高柱,maxRight[i] 同理。

方法一:雙指針 O(1) 空間

維護左右指針 l=0, r=n-1,及 maxL, maxR。
若 height[l] < height[r]:左側水位由 maxL 決定,處理 l;否則處理 r。
單次掃描,無需額外數組。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved