本文主要是介绍Leetcode 11 Container With Most Water(最大容水问题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近比较烦,比较烦,比较烦!事情有点多,虽也说不上忙得不可开交,但倦怠思维影响了我的解决问题的速度。就是很多事压身,突然感觉的压力山大,反而效率变得低下,所以决定趁着周末稍微小修2天。结果一回头已经快5天没更微博了 !果然懒惰才是我最大的敌人。话不多说,先更一道题回复回复状态吧!
11 Container With Most Water 最大容水问题
第一眼看题,easy,easy!so easy!重要的事情说三遍,被atoi虐过的同学怎么能过够认为这是个medium难度的题目呐?最大容量么,不就是选出最大和第二大的数字,然后输出“‘底’*min(高)”么!(至于为啥对底加上‘’后面你就会知道),大笔一挥写下如下代码:
class Solution {
public:int maxArea(vector<int>& height) {sort(height.begin(),height.end());int answer=0;for(int i=0;i<height.size();i++){int j=i-1;if(i==height.size()-1)answer=min(height[i],height[j])*(i-j);}return answer;}
};
看出问题来没有?没有?问题就出在程序的第一句上,所以说如上程序从第一句开始就是错误的。sort()排序,虽然看到最大最小本能的使用了排序算法,这确实是个能够很快识别出最大和第二大高度的程序,但对于题意而言就是之前加‘’的底字,底的位置发生了变化,所以得出的并不是正真的容积,经过排序之后所得的底长度只能为1。所以在该题中根本没有几个例子是能通过的。所以应该怎么办?到底还是应该使用二分法查找。定一个i从头搜索,j从尾部搜索。且定义一个answer用来判断是否是最大容积。程序如下
class Solution {
public:int maxArea(vector<int>& height) {int i=0,j=height.size()-1;int answer=0;while(i<j){int h=min(height[i],height[j]);answer=max(answer,(j-i)*h);while(height[i]<=h) i++;while(height[j]<=h) j--;}return answer;}
};
所以看来编程不能丢啊,当知道自己错在哪里的时候,感觉自己像个大傻子。。。这种问题也能出的喽?
这篇关于Leetcode 11 Container With Most Water(最大容水问题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!