当前位置:   article > 正文

#LeetCode#Problem 11. Container With Most Water-盛最多水的容器(java版)_盛最多水的容器 java

盛最多水的容器 java

读题

题目难度:medium
给定一个非负整数数组,画柱状图。以数组第 i , j 位( i < j )对应的数值为桶壁,加上横轴形成一个盛水的容器。如图所示,水面的高度 =第 i , j 位两位对应数值中的最小值,宽度等于( j - i )。

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

思路

我认为,盛放尽可能多的水,就要追求桶壁尽可能高,桶壁距离尽可能远。桶壁高度涉及到排序,桶壁距离免不了遍历。所以一时真想不到什么好方法。用暴力的方法做一下吧。

暴力解决版本一

一开始没有什么思路,先写了一个暴力的方法解决一下。用两层循环,依次比较,求出每次容器的容水量,记录最大值,复杂度为O(n^2)。代码如下:

class Solution {    
	public int maxArea(int[] height) {
		int maxWater = 0;
		int water = 0;
		int n = height.length;
		int minHeight = 0;

		for (int i = 0; i < n; i++)
			for (int j = i + 1; j < n; j++) {
				minHeight = (height[i] < height[j]) ? height[i] : height[j];
				water = minHeight * (j - i);
				if (water > maxWater) {
					maxWater = water;
				}
			}
		return maxWater;
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

提交了一下,反馈的结果果然不怎么样。

暴力求解的反馈

暴力解决版本二

后来实在不知道该怎么修改,就在内存使用上改了改,少使用了两个变量,效果还提升了不少。代码如下:

class Solution {    
	public int maxArea(int[] height) {
		int maxWater = 0;
		int water = 0;

		for (int i = 0; i < height.length; i++)
			for (int j = i + 1; j < height.length; j++) {
				water = ((height[i] < height[j]) ? height[i] : height[j]) * (j - i);
				maxWater = (water > maxWater) ? water : maxWater;
			}

		return maxWater;
	}	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

暴力第二版的反馈:

暴力第二版的反馈

感想

先记录,再改进。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/146259
推荐阅读
相关标签
  

闽ICP备14008679号