阿亮的算法之路——11. 盛最多水的容器

阅读: 评论:0

阿亮的算法之路——11. 盛最多水的容器

阿亮的算法之路——11. 盛最多水的容器

题目描述

看起来挺复杂的,要考虑宽度、长度,还要考虑之前是否就已经存在最大的容量了。

首次尝试

是有点复杂,但如果用暴力,就很简单,思路简单,代码更简单。我一开始是想着用效率高一点的方式来做的,但想了好一会而也没有思路,所以决定先用暴力的方法做出来。

一写代码,发现暴力破解如此的简单:双层循环,从头开始遍历,每遍历到一个数,就从头遍历到当前位置,用一个变量记录最大的容量,遍历完成就ok。

代码
    public int maxArea(int[] height) {int max = height[0] < height[1] ? height[0]:height[1];for (int i = 2; i <  height.length; i++){int each = height[i];for (int j = 0; j < i; j++){int tempMax = (i-j) * (each < height[j]?each:height[j]);max = max > tempMax ? max:tempMax;}}return max;}

够暴力,够简单,这才是真正的暴力嘛,之前做的那些题,暴力解法甚至比用算法逻辑更复杂。

提交结果

结果也预料到了,肯定效率贼低。

大佬思路

其实我一开始的想法是,动态规划,因为可能需要和前面的最大值比较, 但是当前的所获取的最大值面积可能,好像也需要从前面去遍历,不太好确定。

索性去看了大佬的思路,大佬的思路是:双指针,从两头往中间遍历,记录最大的面积。还消除了最大的面积可能,也就是在移动的时候,只移动短板,不移动长板,因为移动短板可能会使面积增加,移动长板是一定不会使面积增加的,具体细节可以分析一下。

大佬的分析及题解:/

我照着这个思路写出了代码:

		int max = 0;for (int i = 0,j=height.length-1; i < j;){int sho;if (height[i] < height[j]){sho = height[i];i++;}else{sho = height[j];j--;}max = Math.max(max,sho*(j-i+1));}return max;
提交结果

比暴力破解效率不知道高哪儿去了,优秀优秀!!

本文发布于:2024-01-30 21:36:48,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170662180923004.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:最多   之路   算法   容器
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23