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;
    }
    
  • 相关阅读:
    字典常用操作复习
    列表常用方法复习
    爬虫流程复习
    协程解决素数
    yield 复习
    多线程复习2
    多线程复习1
    异常 巩固3
    logging日志基础示例
    2019最新百度网盘不限速下载教程
  • 原文地址:https://www.cnblogs.com/mayapony/p/13035960.html
Copyright © 2011-2022 走看看