• 盛最多的水


    image-20200502172416383

    暴力求解

    public int maxArea(int[] heights){
        int max=0,temp=0,len=height.length;
        for(int i=0;i<len;i++){
            for(int j=i+1;j<len;j++){
                temp=(j-i)*Math.min(height[i],height[j]);
                max=Math.max(max,temp);
            }
        }
        return max;
    }
    

    优化

    解题思路

    • 准备两个指针,一个指向开头,一个指向结尾,此时容器的底最大的
    • 随着指针向内移动,会造成容器的底变小,在这种情况下想让容器盛水变多,就只能在容器的嗷下功夫。
    • 那我们如何决策哪个指针移动呢?我们能够发现不管是左指针向右移一位,还是右指针想左移一位,容器的底都是一样的,都比原来减少了1。
    • 这种情况下我们想要让指针移动后的容器面积增大,就要使移动后的容器的高尽量大,所以我们选择所指的高较小的那个指针进行移动,这样我们就保留了容器较高的那条边,放弃了较小的那条边,以获得更高的边的机会

    代码

    public int maxArea(int[] heights){
        if(height==null||height.length==0) return -1;
        int i=0,j=heights.length-1,ans=0;
        while(i<j){
            int h=Math.min(heights[i],heights[j]);
            ans=Math.max(ans,h*(j-i));
            if(heights[i]<heights[j]){
                i++;
            }else{
                j--;
            }
        }
        return ans;
    }
    
  • 相关阅读:
    HO引擎近况20210912
    查询超时问题的处理
    ubuntu根据关键词批量杀进程
    创建notebook适用的虚拟环境
    信赖域策略优化(Trust Region Policy Optimization, TRPO)
    强化学习(Reinforcement Learning)
    生成对抗网络(GAN与W-GAN)
    卷积神经网络CNN
    循环神经网络RNN
    PyTorch自动求导
  • 原文地址:https://www.cnblogs.com/yh-simon/p/12818810.html
Copyright © 2020-2023  润新知