算法萌新闯力扣:11. 盛最多水的容器

   力扣热题:11. 盛最多水的容器

开篇

 这道题有点神奇,当你不知道要用双指针时,一脸懵逼。当你知道后,轻松秒杀。

题目链接:11. 盛最多水的容器

题目描述

解题思路

1.看题第一感水两个for循环暴力解,但经过这些天的练习,我明白这样肯定过不了
2.然后去看一下英文提示:双指针,思路豁然开朗,靠着直觉,直接秒了
3.这里面需要理解的是指针如何正确移动
首先:面积公式是 S = (i - j) * min(height(i),height(j))(当i>j时)。所以,有两个变量需要处理,一个是宽度,一个是高度。
还是看看大佬的解释吧,感觉自己解释不了这种问题。

代码纯享版

class Solution {
    public int maxArea(int[] height) {
        int left = 0,right = height.length-1;
        int max = 0;
        while(left < right){
            int v = (right - left) * Math.min(height[left] , height[right]);
            max = max > v ? max : v;
            if(height[left] < height[right]) left++;
            else right--;
        }
        return max;
    }
}

代码逐行解析版

class Solution {
    public int maxArea(int[] height) {
        int left = 0,right = height.length-1; //创建左右指针,分别指向数组的开端和末端
        int max = 0; //max用于记录最大值
        while(left < right){ //当左右指针还未重合时
            int v = (right - left) * Math.min(height[left] , height[right]); //计算当前的容水量
            max = max > v ? max : v; //利用三目运算符判断最大值是否需要改变
            if(height[left] < height[right]) left++;  //对指向 高度比较低 的指针进行移动
            else right--;
        }
        return max; //返回最大值
    }
}

结语

 感觉自己平时做题的时候思路总是打不开,需要一些提示才能做出来。题量还是太少了,继续坚持吧!

你可能感兴趣的:(Java算法,算法,leetcode,java)