栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

11. 盛最多水的容器

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

11. 盛最多水的容器

力扣打卡:11. 盛最多水的容器

解题思路

结合双指针的题目再次体会到了,如果想要优化,那么尽量找出题目所给的条件

  • 一定要理清楚题目给出的条件和使用的解题方法,有什么关联

  • 如双指针,不要仅仅只是盯着 left 和 right 的位置变化,更应该关注的是 left 和 right 的含义

  • 例如在此道题中,本身 left 和 right 位置变化没有多大的意义,但是 left 和 right 代表的是 短板和高板 是谁移动了的含义

  • 我们确定了短板影响面积的大小 (条件),所以应该考虑的是 left 和 right 代表的板子哪一个短,而不是考虑 left 和 right 位置本身的含义

  • 这也是经常找不到优化题目的原因,一直理不清楚使用的变量和代表的含义的关系

  • 优化的方向是:找到这个变量和题目所给条件的关系,而不仅仅只是盯着这个变量 值/位置 的变化,更应该关注的:其代表的含义

代码
class Solution {
    public int maxArea(int[] height) {
// 初始化指针为left=0,right=height.length-1
// 优化的关键是给出的隐含的条件,面积取决于短板,应该在这里做文章,这是一个优化的方向
// 重点:因为面积取决于left和right哪一个短 和 right-left 的大小

// 在两个已知的数字中,
// 如果大的往内走,那么一定会导致面积的减小,因为小的值固定,两者的距离也靠近,那么min*(right-left)一定减小
// 如果小的往里走,那么面积的值可能增大,因为大的值固定了,往里走可能出现 原来 min 的值开始增大的情况,即出现比原来min大的数
        int left=0, right=height.length-1;
        int max = (right-left) * Math.min(height[left],height[right]);
        while(left 

总的来说是

  • 优化的方向很大的可能就是题目给出的隐含条件
  • 此题给出的条件就是 面积是取决于短的一个板,所以分析短的板移动和高的板移动会造成什么影响
  • 使用双指针,应该要结合要分析的条件,不要仅仅只是盯着left和right的位置变化,而应该再加上left和right的含义是否有变化了
  • 使用双指针一定要注意的是不要仅仅只是盯着left和right的位置变化,更重要的是盯着left和right的含义,和题目的条件有什么关联的地方
  • 想要优化复杂度,一般就往题目的条件进行靠拢,使用left和right的有关信息与题目进行关联,而不仅仅是盯着left和right的位置变化
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/468675.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号