思路
为了使得最终盛水的容器更大,我们需要挑选出当前更大的容器作为最优,当存在更大的容器时比对更新即可
由于盛水的量是宽*高得到的,则我们必须使用两个指针来确定宽度,要想取得较大的结果,则需要取指针对应的高度较大
计算出当前后,下一个容器应该怎么移动呢?有三种可选方式:双边指针同步扩大、双边指针同步缩小、双边指针择其一扩大或缩小
双边指针同步扩大则意味着需要从数组的中间位置开始扩散,依次圈出容器的宽度,这和双边指针同时缩小本质上是一样的,可以放一起考虑。若同步变化指针,则考虑数组[1,8,5,8],由于跳过了8和5,则无法计算8和8组成的更大容器,故不可取
因此,考虑择其一扩大或者缩小,同理本质上是一样的。故两指针分别从头尾开始向中间聚合,则对于左指针是扩大对右指针是缩小,此时需要挑选缩扩条件
由于当宽度确定后,影响最终容器大小的是高度,故需要取二者的最小值
如上讨论,跳过更大的值,有可能导致错失部分结果,故考虑舍弃较小的值,即左指针扩大
实现
网友评论