• 盛最多水的容器


    盛最多水的容器

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

    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;
    }
    
  • 相关阅读:
    数据解析1127
    数据解析1119
    数据解析1114
    数据解析1122
    数据解析1121
    数据解析1120
    数据解析1116
    数据解析1128
    Twitter惊现新型病毒 每分钟159条速率分散
    宏达电预计本年有望在台湾市场击败诺基亚
  • 原文地址:https://www.cnblogs.com/mayapony/p/13035960.html
Copyright © 2020-2023  润新知