您的位置:首页 > 房产 > 家装 > 双指针: 盛水最多的容器

双指针: 盛水最多的容器

2025/4/19 21:58:50 来源:https://blog.csdn.net/qq_38148090/article/details/139477773  浏览:    关键词:双指针: 盛水最多的容器

目录

描述

解法       


盛水最多的容器_牛客题霸_牛客网

描述

        给定一个数组height,长度为n,每个数代表坐标轴中的一个点的高度,height[i]是在第i点的高度,请问,从中选2个高度与x轴组成的容器最多能容纳多少水

        1.你不能倾斜容器

        2.当n小于2时,视为不能形成容器,请返回0

        3.数据保证能容纳最多的水不会超过整形范围,即不会超过231-1

数据范围:

        0<=ℎ𝑒𝑖𝑔ℎ𝑡.𝑙𝑒𝑛𝑔𝑡ℎ<=1050<=height.length<=105

        0<=ℎ𝑒𝑖𝑔ℎ𝑡[𝑖]<=1040<=height[i]<=104

如输入的height为[1,7,3,2,4,5,8,2,7],那么如下图:

解法       

 双指针算法一般都不复杂,一般有快慢双指针,一般在链表操作会用到;左右双指针一般会用在数组类的题目。

        本题是左右双指针,左指针是从0开始往右遍历,右指针是从 height.length -1 处往左遍历。当左指针在 0 处,右指针在 height.length -1 处,此时容器的底最长,但要想盛最多的水,就要让容器的底乘高数值最大,容器的高取左右两指针所指向的元素最小值。

        当左指针指向的高比右指针所指向的高小,左指针往右前进 1;当左指针指向的高比右指针所指向的高大,右指针往左前进 1;当左指针指向的高和右指针所指向的高相等,无论是左指针右移 1 还是 右指针左移 1 都行,因为就算后面一步遇到一个更大的高,容器也只取两高度中最小的那个,不影响结果。

        

        public int maxArea(int[] height) {int left = 0, right = height.length - 1;int res = 0;for (; left < right; ) {res = Math.max((right - left) * Math.min(height[left], height[right]),res);if (height[left] < height[right]) {left++;} else {right--;}}return res;}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com