美文网首页
ByteDance真题 2020-06-29 42. Trapp

ByteDance真题 2020-06-29 42. Trapp

作者: 苦庭 | 来源:发表于2020-06-29 16:57 被阅读0次

    https://leetcode.com/problems/trapping-rain-water/

    My solution / AC

    /**
     * @param {number[]} height
     * @return {number}
     */
    var trap = function(height) {
        let result = 0;
        for(let i=0; i<height.length; i++){
            let lmax=0, rmax=0;
            for(let j=0; j<i; j++){
                if(height[j]>lmax){
                    lmax = height[j];
                }
            }
            for(let j=i+1; j<height.length; j++){
                if(height[j]>rmax){
                    rmax = height[j];
                }
            }
            let water = Math.min(lmax, rmax) - height[i];
            result += water>0 ? water : 0;
        }
        return result;
    };
    

    Better Solution / AC

    /**
     * @param {number[]} height
     * @return {number}
     */
    var trap = function(height) {
        let res=0;
        let left=0, right=height.length-1;
        let lmax=height[left], rmax=height[right];
        while(left<=right){
            if(lmax<=rmax) {
              if(height[left]>=lmax) lmax = height[left];
              else {
                  res += lmax-height[left];
              }
              left++;
            } else {
                if(height[right]>=rmax) rmax = height[right];
                else {
                    res += rmax-height[right];
                }
                right--;
            }
        }
        return res;
    };
    

    https://leetcode.com/problems/trapping-rain-water/discuss/17357/Sharing-my-simple-c%2B%2B-code%3A-O(n)-time-O(1)-space
    这种写法能够减少循环,节省了运算时间。

    通过两个指针分别向中间靠近,左边低流左边的,右边低流右边的。因为到了中间必然会有两者的交汇,因此必须要left<=right来作为结束循环的条件(而不能用left<right,因为两者相等时还有最后一个left==right那一竖没有流的)。

    相关文章

      网友评论

          本文标题:ByteDance真题 2020-06-29 42. Trapp

          本文链接:https://www.haomeiwen.com/subject/oefafktx.html