题解 | #接雨水问题#

接雨水问题

http://www.nowcoder.com/practice/31c1aed01b394f0b8b7734de0324e00f

- 双指针

  • 运行时间超过96%,内存量超过99%。

alt

  • 能接多少雨水,首先左右两边肯定不能接水,必须要有至少一边高于目前所在的位置才能储存雨水,那么怎么保证自己所在位置一定能接到雨水的?设置左右两边的最大值,那么问题就变成了左右两边最小的那个最大值跟当前所在位置的arr值的差值就是我们需要求的能接到的雨水量。
class Solution {
	public:

    long long maxWater(vector<int>& arr) {
        // write code here
      //定义变量
        int left = 0,right = arr.size()-1;//定义左右指针
        int maxleft = 0,maxright = 0;//定义左右的最大值
        int ans = 0;//定义能接的雨水总量
      //当左边等于右边的时候循环结束  
      while(left < right){
          //更新左右两边的最大值,与当前指针位置的值进行比较选较大值
            maxleft = max(maxleft,arr[left]);
            maxright = max(maxright,arr[right]);
             //(重点)比较左右最大值,更新较小的最大值,累加雨水量
            if(maxleft < maxright){
                ans += (maxleft-arr[left]);
                left++;
            }else{
                ans += (maxright-arr[right]);
                right--;
            }
        }
        return ans;
    }
	};
全部评论

相关推荐

不知道怎么取名字_:两个方向 1.简历针对性准备下 2.面试前也需要准备的 主要还是要看各个公司需求,看公司行业和岗位描述,那里面已经写了对技术的需求,一份简历,不可能和所有嵌入式岗位都匹配的
投递北京经纬恒润科技股份有限公司等公司6个岗位
点赞 评论 收藏
分享
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务