最大盛水问题--力扣中等 (跑路人笔记)

简介: 最大盛水问题--力扣中等 (跑路人笔记)

前言

无(doge)

最大盛水

11. 盛最多水的容器 - 力扣(LeetCode)

image.png

image.png

题目意思很简单,我们有要以数组元素为高数组下标差为底创建一个桶然后我们需要返回容量最大的桶的容量即可.

暴力解决

空间复杂度O(1)时间复杂度O(n2)

先来个思路简单的,我们只需要从头到尾的固定一个桶的一边然后向后寻找桶的另一边此时当桶的值大于ret时就可以将其值作为ret的值了.

代码如下.

class Solution {
public:
    //方法:从头到尾进行比较最后将最大值返回即可.
    int maxArea(vector<int>& height) 
    {
        int n = height.size();
        int ret = 0;
        for(int j =0;j < n; j++)
        {
            if(height[j]*(n-j)<ret)//以j为桶一边的值最大其实就是height[j]*(n-j)了所以当ret>这个值时也就没必要进行下面的循环比较了.
                continue;
            for(int i= j+1;i<n;i++)
            {
                int max = height[j];
                int min = height[i];
                if(min>max)
                {
                    swap(min,max);
                }
                if(min*(i-j)>ret)
                {
                    ret = min*(i-j);
                }
            }
        }
        return ret;
    }
};

image.png

双指针法

空间复杂度O(1)时间复杂度O(n)


这个思路其实也是非常简单的.


我们需要知道的是,桶容积随着左右指针变化时的规律


我们知道桶容积是 (两边最低高度) 乘于 (下边下标的相减值) 的乘积.


所以当两边高度中的最小值不变的时候去挪动最大值的那只指针时桶的容积不可能会增加(因为下标的相减值变低了)


所以我们只需要挪动最小值那个指针使其改变即可.


代码如下

class Solution {
public:
    int maxArea(vector<int>& height) 
    {
        int left = 0;
        int right = height.size()-1;
        int ret = 0;//返回值
        while(left<right)
        {
            int area = min(height[right],height[left])*(right-left);//当前right和left对应的桶容积
            ret = max(area,ret);
            //下面两个if都是为了挪动最小值那个的指针.
            if(min(height[right],height[left])==height[right])
            {
                right--;
            }
            else if(min(height[right],height[left])==height[left])
            {
                left++;
            }
        }
        return ret;
    }
};

image.png

相关文章
|
7天前
|
机器学习/深度学习 程序员
老程序员分享:leetcode笔记201.BitwiseANDofNumbersRange
老程序员分享:leetcode笔记201.BitwiseANDofNumbersRange
|
10月前
|
算法
炸了!力扣官方首发了这套1568页LeetCode算法刷题笔记(彩页版)
你知道现在LeetCode算法在大厂中的重要性吗? 前几天小编看了一个国内算法大神的短视频,他就在视频中指出了算法对当下无论是生活还是找工作中都是非常重要的! 没错这个人就是江湖人称“左神”的左程云老师 小编也简单看了一下一些比较知名互联网大厂的招聘,像阿里,字节,美团,京东,百度等都在简介明确写上了要求“算法精通”! 那么如何达到“算法精通”今天小编特意给大家分享出一套1568页的LeetCode算法刷题(彩页版)笔记,助力你早日在简历写上“算法精通”
炸了!力扣官方首发了这套1568页LeetCode算法刷题笔记(彩页版)
|
2月前
|
存储 索引 Python
LeetCode刷题笔记(1)—— 两数之和
LeetCode刷题笔记(1)—— 两数之和
|
2月前
|
算法 Java 程序员
太全了!字节总监总结240道算法LeetCode刷题笔记
常言道「算法才是编程的灵魂」,不管是Java, python,还是PHP,都跨不过算法这个门槛。
|
9月前
|
存储 算法 Java
刷爆Leetcode!字节算法大佬进阶专属算法笔记:GitHub标星97k+
数据结构就是指一组数据的存储结构。算法就是操作数据的一组方法。 数据结构和算法是相辅相成的。数据结构是为算法服务的,算法作用在特定的数据结构之上。 因此,我们无法孤立数据结构来讲算法,也无法孤立算法来讲数据结构。
|
10月前
|
SQL 索引 Python
【笔记】LeetCode计划——30天Pandas挑战(4)
LeetCode1148题——文章浏览|
93 1
|
10月前
|
索引 Python
【笔记】LeetCode计划——30天Pandas挑战(3)
LeetCode183题——从不订购的客户
114 1
|
10月前
|
Python
【笔记】LeetCode计划——30天Pandas挑战(2)
LeetCode1757题——可回收且低脂的产品
73 1
|
10月前
|
SQL Python
【笔记】LeetCode计划——30天Pandas挑战(5)
LeetCode1683题——无效的推文
55 0
|
10月前
|
Python
【笔记】LeetCode计划——30天Pandas挑战(1)
LeetCode595题——大的国家 记录自己的学习心得以及解题时学到的知识和要注意的点
128 0