42. Trapping Rain Water via Java
一道难点并不在于编程和逻辑的算法题,更像是脑筋急转弯
从左右两侧向中间移动两根指针,同时保留两侧最大值
class Solution { public int trap(int[] height) { if (height==null||height.length < 3) { return 0; // impossible to contain water in this situation } int left = 0; //initiate left pointer int right = height.length - 1; //initiate right pointer int leftMax = height[left]; //the bound in left int rightMax = height[right];//the bound in right int res = 0; while (left < right) { if (height[left] <= height[right]) { if (height[left] > leftMax) { leftMax = height[left++]; } else { res += leftMax - height[left++]; } } else { if (height[right] > rightMax) { rightMax = height[right--]; } else { res += rightMax - height[right--]; } } } return res; } }
time: O(n)
space: O(1)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步