网站建设和网站优化的区别,mu建站工具,推广平台app,德钦网站建设题目链接
力扣 11 盛最多水的容器
题目描述
给定一个长度为 n 的整数数组 height 。有 n 条垂线#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水…题目链接
力扣 11 盛最多水的容器
题目描述
给定一个长度为 n 的整数数组 height 。有 n 条垂线第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明你不能倾斜容器。 示例 1 输入[1,8,6,2,5,4,8,3,7]
输出49
解释图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下容器能够容纳水表示为蓝色部分的最大值为 49。
示例 2
输入height [1,1]
输出1 思路分析
知识点双指针
解析
典型的双指针题先说做法
定义左右两个指针分别向数组中间走可以看出容器的容量就是两个指针指向的值中最小的那个值乘以两个指针之间的距离可以用木桶效应来解释即桶的容量取决于最短的那块木板。 第一次结果出来后值较小的指针往中间走这期间更新最大值直到俩指针相遇。
int maxArea(int* height, int heightSize) {int left0,rightheightSize-1;int ans0;while(leftright){int areafmin(height[left],height[right])*(right-left);ansfmax(area,ans);if(height[left]height[right]){left;}else{right--;}}return ans;}
拓展
为什么不移动最大值而是移动最小值
可以看看力扣官方的题解下面是我根据题解总结出来的
关于无论怎样移动右指针左指针都不会成为容器的边界左指针最小了这句话我有点稀里糊涂我的理解可能就在于左指针的值对于容器容量不起决定性作用了因为无论右指针大还是小移动后的容量肯定比之前的少题解有证明万一一开始的容量不是最大该怎么办所以只能移动右指针