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

这篇博客介绍了LeetCode问题11——盛最多水的容器,难度为medium。博主首先解析了题意,然后分享了两种暴力解决方法,包括最初的O(n^2)复杂度的版本和稍作优化后的版本,虽然仍不尽人意,但博主表示会继续改进。
摘要由CSDN通过智能技术生成

读题

题目难度: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;
	}
}

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

暴力求解的反馈

暴力解决版本二

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

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;
	}	
}

暴力第二版的反馈:

暴力第二版的反馈

感想

先记录,再改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值