zoukankan      html  css  js  c++  java
  • leetcode每日刷题计划--day64

    Num 11 盛最多水的容器

    • 如果要比上一个状态大,一定要宽度更大或者高度更高满足至少一个
    • 从两个边界向里面走,从宽度最大开始
    • 那么如果要更新出更大的面积,一定是有更高的高度,因此每次要动小边向里,找更高的高度(因为min(height[left],height[right])动大边是没用的)
    • 可以验证在实际过程中不存在忽略掉最大边的可能

    (实际操作中唯一一下子想不明白认为可能出问题的地方是。l2和r2小于最终l3和r3,有无可能是他们在前面受限于小边,但是实际大于l3r3围成的边)

    验证过程:

    • s3=min(h[l3],h[r3])*(r3-l3)
    • min(h[l3],h[r3])*(r3-l3))>min(h[l2],[r3])*(r3-l2) (这个式子状态是l2<r3)
    • min(h[l2],[r3])*(r3-l2)>min(h[l2],h[r2])*(r2-l2)
    • 使用字母更准确一些,原理大致一样,只要保证每次动的都是小边就不会漏掉最优解
    class Solution {
    public:
        int maxArea(vector<int>& height) {
            int sum=height.size();
            int left=0;
            int right=sum-1;
            int s=min(height[left],height[right])*(right-left);
            while(left<right)
            {
                if(height[left]<=height[right])
                {
                    left++;
                    if(min(height[left],height[right])*(right-left)>s)
                    {
                        s=min(height[left],height[right])*(right-left);
                    }
                }
                else
                {
                    right--;
                    if(min(height[left],height[right])*(right-left)>s)
                    {
                        s=min(height[left],height[right])*(right-left);
                    }
                }
            }
            return s;
        }
    };
    View Code
    时间才能证明一切,选好了就尽力去做吧!
  • 相关阅读:
    1135
    Sort(hdu5884)
    🍖CBV加装饰器与正反向代理简介
    🍖django之Cookie、Session、Token
    🍖Django之forms组件
    🍖forms组件源码分析
    🍖Django与Ajax
    🍖Django框架之模板层
    进程的内存空间相互隔离
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises), problem: (D) Treasure Island
  • 原文地址:https://www.cnblogs.com/tingxilin/p/12181164.html
Copyright © 2011-2022 走看看