zoukankan      html  css  js  c++  java
  • 盛最多水的容器

    盛最多水的容器

    一般需要移动左右两头的问题可以考虑使用双指针

    1. 方法一:使用两重循环,遍历所有面积的可能,时间复杂度为O(n^2)级别

    2. 方法二:使用双指针,实质就是在移动的过程中不断消去不可能成为最大值的状态!

      • 左右两别分别使用l, r指向

      • 固定l, r指向较高的,移动较低的

      • 如图中,右边固定了最后一根柱子,左边从第一根柱子移动到第二根(因为左一较短)

      • 想象假如固定左边,长方形的高度就固定了(等于或小于左边矮的高度),右边再往左移面积只可能减小

      • 而如果移动固定右边,左边柱子的高度就有可能增高,长方形的高度就会增高,面积也有可能增高

    int maxArea(vector<int>& height) {
        int maxs = 0, l = 0, r = height.size() - 1;
        while (l < r) {
            maxs = max(maxs, min(height[l], height[r]) * (r - l));
            if (height[l] > height[r]) {
                r --;
            } else {
                l ++;
            }
        }
        return maxs;
    }
    
  • 相关阅读:
    语法树,短语,直接短语,句柄
    理解文法和语法
    了解编译原理
    实习日记7.20
    实习日记7.19
    实习日记7.18
    实习日记7.15
    实习日记7.13-7.14
    实习日记7.12
    实习日记7.11
  • 原文地址:https://www.cnblogs.com/mayapony/p/13035960.html
Copyright © 2011-2022 走看看