zoukankan      html  css  js  c++  java
  • LeetCode 42 接雨水

    本题目是给定一个数组,数组每个位置代表高度,求最多能接多少的雨水,详情见图,图中蓝色部分即为接的雨水。这道题实现起来并不复杂,但是思路有点难想。首先从第一个位置开始,向后寻找第一个高度大于等于它的位置,如果找到了,那么第一个水池就是这两部分之间,水面高度最大就是开始位置的高度,用这个最大高度依次减去水池中每个位置的高度就是这个水池能接的水。第二种情况,它之后只有比它低的位置,那么就从它之后这些位置中选择一个最大的高度的位置,如果有多个位置最高,选择最后一个最高的,然后从这个位置开始到我们找到的位置就是水池,水池的水面高度就是刚才找出的最大高度,这个最大高度是比我们开始的位置要低的,求水池接的水量和第一种方法相同。

    class Solution {
    public:
        int trap(vector<int>& height) {
            int sz=height.size();
            int ans=0,nowmax,pos;
            for(int i=0;i<sz;i++)
            {
                nowmax=-1;
                if(i==sz-1) break;
                if(height[i]<=height[i+1]) continue;
                for(int j=i+1;j<sz;j++)
                {
                    if(nowmax<=height[j])
                    {
                        nowmax=height[j];
                        pos=j;
                    }
                    if(nowmax>=height[i]) break;
                }
                int high=min(height[i],nowmax);
                for(int j=i+1;j<pos;j++)
                {
                    ans+=high-height[j];
                }
                cout<<i<<' '<<pos<<' '<<ans<<endl;
                i=pos-1;
            }
            return ans;
        }
    };
    
  • 相关阅读:
    C#面向对象编程
    WPF Storyboard的启动
    WPF中的窗体Show()和ShowDialog()区别。
    四元数
    小学生四则运算
    小学生四则运算
    javascript ===与==的区别
    a标签的href与onclick中使用js的区别
    10步让你成为更优秀的程序员
    检查SQL Server被哪个进程占用,且杀进程。
  • 原文地址:https://www.cnblogs.com/ambition-hhn/p/12872135.html
Copyright © 2011-2022 走看看