【leetcode11题双指针】

本文介绍了LeetCode第11题的解决方案,通过双指针法寻找数组中能构成的最大面积。讲解了双指针法的原理,包括为何使用双指针、只移动一端的原因,以及算法流程。最后提供了代码实现。
摘要由CSDN通过智能技术生成

leetcode11题

所用知识

双指针,三元运算符,while循环
三元运算符:三元运算符也被称为条件运算符。该运算符有三个操作数,并且需要判断布尔表达式的值。主要是用来决定哪个值应该赋给变量。
语法格式:布尔表达式 ? 表达式1:表达式2
当布尔表达式的值为true时,则返回表达式1的值;当布尔表达式的值为false时,则返回表达式2的值

讲解

为何使用双指针法?
在本题中双指针代表的是可以作为容器边界的所有位置的范围。在开始时,双指针指向数组的左右边界,表示数组中所有的位置都可以作为容器的边界。在这之后,我们每次将对应的数字较小的那个指针往另一个指针的方向移动一个位置,就表示我们认为这个指针不可能再作为容器的边界了。
为什么只移动一端?
因为如果向里移动长的,得到的面积不会超过原来的面积,所以原来的面积是当前短指针情况下的最大值(只能向里移动的情况下)。

设置两个指针为i,j,其中代表的高度为h[i],h[j],则面积为s[i,j]
则表示面积公式为S(i, j) = min(h[i], h[j]) × (j - i)
在任何状态下,无论i指针还是j指针向中间移动一格,都会导致水槽底边宽度变短一个单位。
若向内移动短板 ,水槽的短板 min(h[i], h[j])可能变大,因此下个水槽的面积 可能增大。若向内移动长板 ,水槽的短板 min(h[i], h[j])不变或变小,因此下个水槽的面积一定变小 。无论是移动短板或者长板,我们都只关注移动后的新短板会不会变长,而每次移动的木板都只有三种情况,比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值