LeetCode 42. 接雨水(C++)实现

时间:2025-03-29 10:24:12
int trap(vector<int>& height) { //ans保存雨水 cunrrent为当前位置 int ans = 0, current = 0; //栈保存高度 stack<int> st; //遍历所有的块 while (current < height.size()) { //当栈为非空时 或者 当前块比栈顶高时,说明可以接住雨水 while (!st.empty() && height[current] > height[st.top()]) { //top保存洼地位置 int top = st.top(); //弹出洼地的位置 st.pop(); if (st.empty()) break; //计算洼地宽度 int distance = current - st.top() - 1; // 洼地附近的最低边缘减去洼地高度 int bounded_height = min(height[current], height[st.top()]) - height[top]; //加上一块洼地的水容量 ans += distance * bounded_height; } //!() ||height[current] < height[()]满足时入栈 st.push(current++); } return ans; }