当前位置: 首页 > news >正文

Leetcode面试经典150题-11.盛水最多的容器

解法都在代码里,不懂就留言或者私信

class Solution {/**题目使用双指针法求解,指针left指向0位置,指针right指向N-1位置每次比较left和right,谁小结算谁的水量(以对方为对侧最大值),结算完每个位置的水量答案必在其中 */public int maxArea(int[] height) {if(height.length == 2) {/**如果只有两根柱子,二者的距离是1,高度是二者中较小的那个 */return Math.min(height[0], height[1]);}int ans = 0;int left = 0;int right = height.length - 1;while(left < right) {/**左边小结算左边的 ,右边小结算右边的,我们每一步求的是以这个较小的值为高能扩出的矩形最远能到多远(比如左边的往右找大于它的最右边在哪里因为高固定的情况下,宽度越宽面积越大)* 这里也可以写成if(arr[left] >= arr[right]) {*  ans = Math.max(ans, arr[right] * (right - left + 1))*  right --* } else {*  ans = Math.max(ans, arr[left] * (right - left + 1))*  left ++;* }* 装习惯了,改不过来了* 这里整体的意思就是谁小结算谁的水量* 为啥谁小结算谁的水量呢? 例如left比较小,那当前的right是大于你最靠右的,以你为最大高度理论上找到越靠右的大于你的越好* 那right的右边有没有大于left的呢? 恐怕不会有,如果有的话那left遇到它的时候就结算了,为什么会等到right呢,肯定右边没有或者都被left淘汰了* 所以left~right是以left的高度为最小高度的最宽的范围* right也同理,以每个点为最低高度算一个值,最大的就是我们要的答案*/ans = Math.max(ans, height[left] >= height[right]? height[right--] * (right - left + 1) : height[left++] * (right - left + 1));}return ans;}
}

运行结果还是一般般,过了就行了不追求极致


http://www.mrgr.cn/news/8283.html

相关文章:

  • 速盾:cdn能防ip追踪吗?
  • 【Linux学习】Linux开发工具——vim
  • 打卡学习Python爬虫第五天|Xpath解析的使用
  • 面向对象05:什么是继承
  • 思科设备静态路由实验
  • 记录一次Android11系统证书安装失败
  • 《机器学习》 逻辑回归 大批量数据的下采样 <8>
  • Unity 资源 之 Photon Inventory 2 (Game Creator 2)
  • 【面试】jvm栈的大小通过什么参数设置?
  • Java 2.4 - JVM
  • WordPress简约响应式个人博客Kratos主题
  • 通过主成分分析实现检测金融中的异常交易模式
  • 游戏开发设计模式之状态模式
  • arm接口技术一--arm核总结
  • nas挂载到电脑上当文件夹使用(ubuntu 和windows电脑的挂载方式)
  • springboot如何解决跨域问题
  • 【Spring】Spring缺点是DI依赖注入功能依赖反射,影响性能。为什么反射会影响性能?
  • 【机器学习】以KNN为例的交叉验证 网格搜索
  • Java—Arrays api
  • iZotope Ozone 11 Advanced:专业音频制作与母带处理的巅峰之作