欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

【LeetCode笔记】11.盛最多水的容器(Java、双指针法)

发布时间:2024/7/23 36 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【LeetCode笔记】11.盛最多水的容器(Java、双指针法) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 题目描述
  • 代码 & 解题思路

题目描述


代码 & 解题思路

  • 思路:使用左右两个指针,不断缩小范围,并在每次缩小的过程对最大值进行更新。
  • 代码实现不难,主要是弄明白为啥这样做就能得到正确的值
  • 简单描述就是:每次舍弃掉上图中的一根“柱子”,选择左右指针中较矮的柱子。
  • 为什么呢?因为对于被舍弃的柱子,它已经完成了它的任务,即“获取该柱子能组合出的最大的容器值”。之后另外一个指针无论如何再向舍弃柱子方向移动,都不可能再取得更大的值了(因为容器实际高度按照小了算),所以可以缩小左右指针容纳的范围。
class Solution {public int maxArea(int[] height) {/**双指针法:1. 代码实现不难2. 主要是算法正确性验证* 把问题缩小*/int len = height.length;int left = 0, right = len-1;int max = 0;while(left != right){// 维护 maxmax = Math.max(max, Math.min(height[left], height[right]) * (right - left));// 缩小范围if(height[right] < height[left])right--;elseleft++;}return max;} }
  • 时间复杂度 O(n),即使遍历一次数组
  • 空间复杂度 O(1)
创作挑战赛新人创作奖励来咯,坚持创作打卡瓜分现金大奖

总结

以上是生活随笔为你收集整理的【LeetCode笔记】11.盛最多水的容器(Java、双指针法)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。