力扣(LeetCode) ——11.盛水最多的容器(C++)

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

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。
说明: 你不能倾斜容器。

解题思路:

解法一: 使用暴力求解,通过两个循环来遍历查找最大值。时间复杂度为:O(n^2^)

解法二: 使用双指针来求解,遍历一遍数组即可找到最大值。时间复杂度为:O(n)

  1. left指向第一个位置,right指向最后一个位置;
  2. left大于right结束循环;
  3. 通过leftright的位置算出当前能够容纳水的值,用一个临时变量存储,用max函数取最大值;
  4. 再判断两个位置的值,当left下标位置的值小时++,right下标位置小时--;
  5. 重复循环第三步和第四步直到循环结束则求出了最大值。

最终代码:

cpp 复制代码
int maxArea(vector<int>& height) 
{
	 int left =0;
	 int right = height.size() - 1;
	 int ret = 0;
	 while(left < right)
	 {
	     int tmp = min(height[left], height[right]) * (right - left);
	     ret = max(ret , tmp);
	     if(height[left] < height[right])
	     {
	         left++;
	     }
	     else
	     {
	         right--;
	     }
	 }
	 return ret;
}

赶紧动起手来吧!!!

点击下方即可跳转
11.盛水最多的容器

相关推荐
我先去打把游戏先3 分钟前
Ubuntu虚拟机(服务器版本)Git安装教程(附常用命令)——从零开始掌握版本控制
服务器·c语言·c++·git·嵌入式硬件·物联网·ubuntu
周末也要写八哥5 分钟前
算法实例分析:使数组相等的最小开销
算法
吃好睡好便好9 分钟前
在Matlab中绘制质点运动轨迹图
开发语言·学习·算法·matlab·信息可视化
艾莉丝努力练剑9 分钟前
【Linux网络】Linux 网络编程:HTTP(四)从手写服务器到生产级 Nginx 与 cpp-httplib 实战
linux·运维·服务器·网络·c++·nginx·http
爱炼丹的James11 分钟前
第三章 搜索和图论
数据结构·算法·图论
菜菜笔记12 分钟前
【无标题】
算法
咩咦16 分钟前
C++学习笔记21:日期类加减天数
c++·学习笔记·运算符重载·日期类·operator+·operator+=
努力努力再努力wz18 分钟前
【QT入门系列】QWidget 六大常用属性详解:windowOpacity、cursor、font、focus、toolTip 与 styleSheet
android·开发语言·数据结构·c++·qt·mysql·算法
少司府19 分钟前
Tools相关:深入浅出学Git
大数据·c++·git·gitee·github·仓库·分支
神仙别闹20 分钟前
基于MFC(C++)实现(界面)学委作业管理系统
开发语言·c++·mfc