LeetCode第11题盛最多水的容器

继续打卡算法题,今天学习的是第LeetCode的第11题盛最多水的容器,这道题目是道中等题,但是我感觉不像中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码能力有一些帮助。

分析一波题目

其实我觉得这个题目很难,因为我一开始想不到它的诀窍。

如果要盛水更多,我们可以想到两点:

  1. 水柱越高,盛水越多
  2. 水柱越宽,盛水越多

两根水柱之间盛水的面积公式:

盛水面积 = Min(height[start], height[end]) * (end-start)

如果用穷举法,我们需要对每根水柱都遍历一遍,这样时间复杂度会达到O(n^2)

有没有技巧呢?其实是有的,我们可以想象下从两边往内找,同时有两个指针,如果我们每次只移动短水柱会有什么效果?

短水柱移动可能会导致面积变大,但是不会变小。因此我们可以使用双指针来解决此问题。

编码解决

java 复制代码
class Solution {
    public int maxArea(int[] height) {

            //双指针法,有个规律,只能移动短板才可能导致面积变大,移动长板长度不变或变小,面积一定变小
            int res = 0;
            int start = 0;
            int end = height.length -1;

            while(start < end) {
               //水槽最大面积由短板面积决定
               int t =  Math.min(height[start], height[end]) * (end - start);
               res = Math.max(res, t);
               //移动短板
               if(height[start] < height[end]) {
                   start++;
               } else {
                   end--;
               }
            }
            return res;
    }
}

总结

很多算法类题目其实是有一些技巧性的解法的,如果靠暴力方法解决性能极低,通过一个技巧提升性能,我想这种技巧应该还是要多实践,多写,多思考,多积累,我相信一定可以积累一些解决技巧的。

相关推荐
谷雨不太卷6 小时前
进程的状态码
java·前端·算法
散峰而望6 小时前
【算法竞赛】C/C++ 的输入输出你真的玩会了吗?
c语言·开发语言·数据结构·c++·算法·github
躺不平的理查德6 小时前
时间复杂度与空间复杂度备忘录
数据结构·算法
yaki_ya6 小时前
yaki-C语言:从概念基础到内存解析---数组(array)完全指南
java·c语言·算法
刃神太酷啦6 小时前
扒透 STL 底层!map/set 如何封装红黑树?迭代器逻辑 + 键值限制全手撕----《Hello C++ Wrold!》(23)--(C/C++)
java·c语言·javascript·数据结构·c++·算法·leetcode
Lee川7 小时前
打字机是怎么炼成的:Chat 流式输出深度解析
前端·后端·面试
不会敲代码17 小时前
我写了一个 HTML 文件,把 JS 事件循环彻底搞懂了
前端·javascript·面试
挽星安7 小时前
代码随想录算法训练营第五十天|卡码网 99 岛屿数量、卡码网 100 最大岛屿的面积
算法
葫三生7 小时前
《论三生原理》系列构建文理同构的认知体系?
人工智能·科技·深度学习·算法·机器学习·transformer
.NET修仙日记7 小时前
2026 .NET 面试八股文:高频题 + 答案 + 原理(面试加分技巧)
面试·职场和发展·.net·.net core·微软技术