双指针: 盛水最多的容器

目录

描述

解法       


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

描述

        给定一个数组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;
        }

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值