11. 盛最多水的容器

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

解题思路

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

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

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

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

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

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

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

代码

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<right){
            int width = right-left;
            max = height[left]<height[right] ? 
                Math.max(max,width * height[left++]) :
                Math.max(max,width * height[right--]);
        }
        return max;
    }
}

总的来说是

  • 优化的方向很大的可能就是题目给出的隐含条件
  • 此题给出的条件就是 面积是取决于短的一个板,所以分析短的板移动和高的板移动会造成什么影响
  • 使用双指针,应该要结合要分析的条件,不要仅仅只是盯着left和right的位置变化,而应该再加上left和right的含义是否有变化了
  • 使用双指针一定要注意的是不要仅仅只是盯着left和right的位置变化,更重要的是盯着left和right的含义,和题目的条件有什么关联的地方
  • 想要优化复杂度,一般就往题目的条件进行靠拢,使用left和right的有关信息与题目进行关联,而不仅仅是盯着left和right的位置变化
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值