C++算法:.盛最多的水的容器:(双指针,夹逼法)
leetcode相关C++算法解答: https://github.com/Nereus-Minos/C_plus_plus-leetcode
题目:
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
实例:
输入: [1,8,6,2,5,4,8,3,7] 输出: 49
思路一:
两线段之间形成的区域总是会受到其中较短那条长度的限制。此外,两线段距离越远,得到的面积就越大。所以每次将指向较短线段的指针向较长线段那端移动一步。与之前面积比较.
思路二:
//使用冒泡排序思想,但是超出时间限制
代码:
#if 1
/*
方法二:双指针法算法思路:两线段之间形成的区域总是会受到其中较短那条长度的限制。此外,两线段距离越远,得到的面积就越大。所以每次将指向较短线段的指针向较长线段那端移动一步。与之前面积比较我们在由线段长度构成的数组中使用两个指针,一个放在开始,一个置于末尾。 此外,我们会使用变量 maxarea 来持续存储到目前为止所获得的最大面积。 在每一步中,我们会找出指针所指向的两条线段形成的区域,更新 maxarea,并将指向较短线段的指针向较长线段那端移动一步。
*/
class Solution {public:int maxArea(vector<int>& height) {//特殊情况if(height.size() < 2)return 0;//使用双指针法int start = 0;int end = height.size()-1;int maxarea = min(height[start], height[end])*(end-start);while((end-1) > start){if(height[end] > height[start]){maxarea = max(min(height[start+1], height[end])*(end-start-1), maxarea);start++;}else{maxarea = max(min(height[start], height[end-1])*(end-start-1), maxarea);end--;}}return maxarea;}
};
#endif#if 0
class Solution {
public:int maxArea(vector<int>& height) {//特殊情况if(height.size() < 2)return 0;//使用冒泡排序思想,但是超出时间限制int ret = 0;int i,j;int temp = 0;for(i = 0; i<height.size()-1; i++)for(j = i+1; j<height.size(); j++){if(height[i]<=height[j])temp = height[i] * (j-i);elsetemp = height[j] * (j-i);if(temp > ret)ret = temp;}return ret;}
};
#endif
C++算法:.盛最多的水的容器:(双指针,夹逼法)相关推荐
- LeetCode--11.盛最多的水(双指针,暴力)
盛最多的水(C) 1. 题目描述 2. 题目分析 3. C语言实现 3.1 暴力穷举法 3.2 双指针法 1. 题目描述 难度:中等 2. 题目分析 该题目数字化之后可以这么理解: 给定数据[(a1, ...
- c++算法:四数之和---固定两数,用夹逼法
leetcode相关C++算法解答: https://github.com/Nereus-Minos/C_plus_plus-leetcode 题目: 给定一个包含 n 个整数的数组 nums 和一个 ...
- [Leedcode][JAVA][第11题][盛最多水的容器][双指针][贪心]
[问题描述]11.盛最多水的容器 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 ...
- 【数据结构与算法】力扣实战之移动零、盛最多的水、爬楼梯
练题法则 5-10分钟读题与思考 不要纠结没有思路就直接看题解: 不要死磕觉得自己很失败,怎么我们就想不出来: 基本上这些算法题,让我们自己想出来是不可能的: 拿跳表的来说,如果我们能从0-1把它想出 ...
- C++算法:最大回文子串---动态规划-----夹逼法----中心扩展法
leetcode相关C++算法解答: https://github.com/Nereus-Minos/C_plus_plus-leetcode 题目: 给定一个字符串 s,找到 s 中最长的回文子串. ...
- 算法题解(Leetcode 11、15、17、19、20:盛最多水的容器、三数之和、电话号码的字母组合、删除链表的倒数第 N 个结点、有效的括号)
文章目录 [11. 盛最多水的容器 - 中等 - 9/7](https://leetcode-cn.com/problems/container-with-most-water/) [15. 三数之和 ...
- 算法leetcode|11. 盛最多水的容器(rust重拳出击)
文章目录 11. 盛最多水的容器: 样例 1: 样例 2: 提示: 原题传送门: 分析 题解 rust go c++ java typescript python 11. 盛最多水的容器: 给定一个长 ...
- 算法探索_盛最多水的容器
问题描述: 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其 ...
- 画解算法:盛最多水的容器 | 腾讯面试编程50题(二)
01 题目:给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其 ...
最新文章
- 2017英国AI形势报告:认知鸿沟、新商业模式和当下的挑战
- css3 @keyframes、transform详解与实例
- GridBagLayout布局管理器应用详解
- Hibernate调用存储过程
- supervisor
- 自带容器_什么是衬胶容器罐以及质量标准?
- KubeEdge 实践过程的记录
- C语言丨线性表(二):线性链表(单链表)
- java enum private_初步理解Java枚举类型
- matlab实现QPSK调制解调
- 抖音mysql_抖音排行榜数据库设计方案
- Coverage [minx,miny,maxx,maxy] is [12, 4, 13, 6, 3], index [x,y,z] is [2, 5, 3]错误原因及其解决方式...
- 这些年我的不足(不够专注,不善于推迟满足感,阅读量不够……-无网不剩 http://t.cn/zOe1RPz)
- 【蓝桥杯】看完这些,还在担心自己拿不到奖?
- [PYTHON]批量合并WORD文档,DOCX格式
- Vue Antdv 上传组件(a-upload、a-upload-dragger)二次封装(DZMAntdvUpload)
- 全国344个主要城市(县)地图
- pymysql mysql 1064_python使用pymysql操作MySQL错误代码1054和1064处理
- centos命令行安装matlab2016b
- ASP初学者的10个编程技巧