解題思路
這題看題目時沒想法,但看完 neetcode 的解法後恍然大悟。我覺得分析問題時,如果當下沒辦法想出演算法,可以先用人類笨方法思索人類會怎麼解問題。確定這解法 ok 後,再轉換成比較電腦的形式,一步步轉換過去。
程式碼
class Solution { public: int trap(vector<int>& height) { int n = height.size(), ans = 0, minHeight; vector<int> leftMax(n, 0); vector<int> rightMax(n, 0); for(int i=1; i<n; i++) { leftMax[i] = max(leftMax[i-1], height[i-1]); rightMax[n-1-i] = max(rightMax[n-i], height[n-i]); } for(int i=0; i<n; i++) { minHeight = min(leftMax[i], rightMax[i]); ans += max(minHeight - height[i], 0); } return ans; } };
沒有留言:
張貼留言