leetcode刷题 Day21

题目:
leetcode刷题 Day21_第1张图片
思路:暴力解决方法时间复杂度为O(n2),双循环遍历即可,但是好像不能这样做,因为
执行用时 : 363 ms, 在Container With Most Water的Java提交中击败了34.81% 的用户
内存消耗 : 44.2 MB, 在Container With Most Water的Java提交中击败了71.84% 的用户
所以,时间复杂度太高,需要改变思路;此面积受到较短线段与两线段之间距离的影响,选取最前端线段和最末尾端线段作为初始面积值,将较长线段向内移动,不会让面积有增加的可能,只会使得面积减小,而将较短线段向内移动,虽然使得两线段之间距离减小,但是会有可能使得短线段变长,从而有增加面积的可能,所以我们每次更新时,只需要比较两线段的长度,将较短线段向内移动,更新面积值即可;
代码:

class Solution {
    public int maxArea(int[] height) {
        int len=height.length;
        int h=0;
        int w=0;
        int i=0;
        int j=len-1;
        int res=(j-i)*(Math.min(height[i],height[j]));//假设的最大装水值
        while(i

运行结果:
leetcode刷题 Day21_第2张图片

你可能感兴趣的:(leetcode刷题 Day21)