力扣最热一百题——盛水最多的容器

终于又来了。我的算法记录的文章已经很久没有更新了。为什么呢?

这段时间都在更新有关python的文章,有对python感兴趣的朋友可以在主页找到。

但是这也并不是主要的原因

在10月5号我发布了我的第一篇博客,大家也可以看见我的每一篇算法博客的开头都是吾日三省吾身,比那个男人帅吗?比那个男人爱她吗?比那个男人有实力吗?也可以在我的文章中的比如代码注释,结语感想看见一些emo 的句子

在之后的文章不会出现了。因为我已经彻底的失去了所爱的那个她,彻底失去。她的言语刺痛了我,剥夺了我的爱。

但是,流程该走还是要走,那就进入新的流程吧!

一身正气报国家,旁无乱境不恋她

ヾ(◍°∇°◍)ノ゙


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

下述题目描述和示例均来自力扣

题目描述

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i])

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

**说明:**你不能倾斜容器。

示例

示例 1:

复制代码
输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

示例 2:

复制代码
输入:height = [1,1]
输出:1

提示:

  • n == height.length
  • 2 <= n <= 105
  • 0 <= height[i] <= 104

回归文章第一弹就不搞这些虚的了。直接上嘴脸!

思路

其实就是要找到这里面,两个柱子包起来里面的最大的面积对吧。

第一种思路就是直接暴力for循环,把每一个都找一遍,然后返回最大的那一个。我在这里就不演示暴力的解法了,盲猜跑不出来(反正我没试过♪(^∇^*))。

然后就是第二章思路,在数组里面优化是不是第一时间想到的就是双指针呐(*^▽^*)!对喽~~

我们直接定义左右指针,然后精华是什么呢?什么时候移动指针呢?

答:

在每一次判断的时候,那个指针所对应的高度低,就移动谁,left是++,right是--,你想嘛。这里装水的高度根据木桶效应是取决于最低的那一个的,如果你移动的是更低的那一个,那么即使右更高的,也没有用,而且底边长还会更低,对吧,那就是这个思路,代码如下:

Java解法没有之一:双指针

详细的代码注释也有

java 复制代码
class Solution {
    public int maxArea(int[] height) {
        // 利用双指针
        int left = 0;
        int right = height.length - 1;
        // 开始循环判断
        // 在这里的时候,left == right是没有用的,所以直接 < 即可
        int result = 0;
        while (left < right) {
            // 底边长度为right - left
            int b_len = right - left;
            // 高度是他们之间最小的那一个
            // 这里每次固定移动高度较低的那一边
            int h_len = height[left] < height[right] ? height[left++] : height[right--];
            // 获取面积
            int area = b_len * h_len;
            // 大于result就刷新值
            if (area > result) {
                result = b_len * h_len;
            }

        }
        return result;
    }
}

就是快


因为很多同学也是使用C++,和Python的,所以我今后也同时提供C++和python的语法

C++解法没有之一:双指针

cpp 复制代码
class Solution {
public:
    int maxArea(vector<int>& height) {
        int left = 0;
        int right = height.size()- 1;
        int result = 0;
        while(left < right){
            int b_len = right - left;
            int h_len = height[left] < height[right] ? height[left++] : height[right--];
            int area = b_len * h_len;

            if(area > result){
                result = area;
            }
        }
        return result;
    }
};

??????????????????????????????????????????????????????????????????????????????????????????????????

我没看错吧,C++要花60ms,Java只需要2ms,wdf?


Python解法之没有之一:双指针

python 复制代码
class Solution:
    def maxArea(self, height: List[int]) -> int:
        left = 0
        right = len(height) - 1
        result = 0
        while left < right:
            b_len = right - left
            h_len = height[left] if height[left] < height[right] else height[right]
            if height[left] < height[right]:
                left += 1
            else:
                right -= 1
            area = b_len * h_len
            if area > result:
                result = area
        return result
        

怎么说捏,python更慢我是理解的,C++比Java慢那么多我不理解


结语

咋说捏~!~

C++和Java用同一个方法

C++比Java慢,emmmmmmmmmmmmmmmmmmmmmmmmmmmm

不理解

那我直接得出结论

Java是这个世界上最好的语言~!!!!!!!!!!!

再见┏(^0^)┛

相关推荐
Sylvia-girl41 分钟前
IO流~~
java·开发语言
打工哪有不疯的44 分钟前
使用 MSYS2 为 Qt (MinGW 32/64位) 完美配置 OpenSSL
c++·qt
aiguangyuan1 小时前
基于BERT的中文命名实体识别实战解析
人工智能·python·nlp
喵手1 小时前
Python爬虫实战:知识挖掘机 - 知乎问答与专栏文章的深度分页采集系统(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集知乎问答与专栏文章·采集知乎数据·采集知乎数据存储sqlite
铉铉这波能秀1 小时前
LeetCode Hot100数据结构背景知识之元组(Tuple)Python2026新版
数据结构·python·算法·leetcode·元组·tuple
kali-Myon1 小时前
2025春秋杯网络安全联赛冬季赛-day2
python·安全·web安全·ai·php·pwn·ctf
晚霞的不甘1 小时前
Flutter for OpenHarmony 实现计算几何:Graham Scan 凸包算法的可视化演示
人工智能·算法·flutter·架构·开源·音视频
冰暮流星1 小时前
javascript之数组
java·前端·javascript
Re.不晚1 小时前
JAVA进阶之路——无奖问答挑战3
java·开发语言
代码游侠1 小时前
C语言核心概念复习——C语言基础阶段
linux·开发语言·c++·学习