所用知识
双指针,三元运算符,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])不变或变小,因此下个水槽的面积一定变小 。无论是移动短板或者长板,我们都只关注移动后的新短板会不会变长,而每次移动的木板都只有三种情况,比