力扣打卡: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的位置变化



