算法练习(6):Container With Most Water
来源:互联网 发布:网吧网络为什么不卡 编辑:程序博客网 时间:2024/06/05 04:15
上题目先:
题意:这道题的意思是,以X轴为桶底,输入n个正整数作为桶边的高,然后这些桶边所在的位置正是它们在数组中的序号,也就是说两个桶边的距离是序号差的绝对值。
分析与思路:这道题目,由于是只需要找到能到达的最大容量值,看起来两层循环应该可以暴力求解的,但是我也不清楚直接暴力求解会不会超时,我是采用了一点稍微巧妙一点的方法的。我的想法是,容量大小由较短边和底长决定的,当一开始取底最长的时候,每次缩短一个单位的底长,这种情况下,只有当前最短边比上一轮的最短边高才有可能增加容量(底长变短了)。所以我的方法是,一开始,左右桶边分别先取最左最右的两条边,然后比较这两条边,哪边的比较小则向中间靠近一位的距离,直到两条边重合,注意的是,当这个比较过程中两条边高度相等,谁向中间移动一位后更高则谁移动。还有一个小细节,由于每次的容量都是由两边中较短边决定的,所以我把计算容量时边长短的判断与上面的判断重用了。思路都体现在代码的注释中了,如下:
class Solution {public:int maxArea(vector<int>& height) {int maxV = 0;//最大容量int l = 0, r = height.size() - 1;//桶的左右边序号int temp = 0;//代表当前容量while (l != r) {//直到两条桶边重合if (height[l] < height[r]) {//当右边比左边高时temp = height[l] * (r - l);//当前条件下的容量l++;//左边向中间靠拢一位} else if(height[l] > height[r]) {temp = height[r] * (r - l);r--;}else {//当两边高度一样时temp = height[r] * (r - l);if (height[l + 1] > height[r - 1]) {//谁往中间一位后高度更高则谁移动l++;}else { r--; }}if (temp > maxV) maxV = temp;//更新最大容量}return maxV;}};
阅读全文
0 0
- 算法练习(6):Container With Most Water
- 【LeetCode算法练习(C++)】Container With Most Water
- Container With Most Water 算法
- Leetcode练习 #11 Container With Most Water
- LeetCode算法问题6 —— Container With Most Water
- LeetCode OJ算法题(十一):Container With Most Water
- Container With Most Water
- Container with most water
- Container With Most Water
- Container With Most Water
- Container With Most Water
- Container With Most Water
- Container With Most Water
- Container With Most Water
- Container With Most Water
- Container With Most Water
- Container With Most Water
- Container With Most Water
- vue 01
- java中package(包)
- equals方法和hashCode方法
- poj2482/洛谷1502 线段树+扫描线
- python中@的用法
- 算法练习(6):Container With Most Water
- 7.TPC-C测试工具——收集统计信息
- C++连接mysql数据库
- HDU1166 线段树 或 树状数组
- 计蒜客 Frequent Subsets Problem 【暴力】
- cookie和session
- 【2012百度之星/初赛上】小小度刷礼品
- [LeetCode]123. Best Time to Buy and Sell Stock III
- Oracle的MetaLink使用