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

2023-11-07 20:28

本文主要是介绍力扣最热一百题——盛水最多的容器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

这段时间都在更新有关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解法没有之一:双指针

详细的代码注释也有

class Solution {public int maxArea(int[] height) {// 利用双指针int left = 0;int right = height.length - 1;// 开始循环判断// 在这里的时候,left == right是没有用的,所以直接 < 即可int result = 0;while (left < right) {// 底边长度为right - leftint 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++解法没有之一:双指针

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解法之没有之一:双指针

class Solution:def maxArea(self, height: List[int]) -> int:left = 0right = len(height) - 1result = 0while left < right:b_len = right - lefth_len = height[left] if height[left] < height[right] else height[right]if height[left] < height[right]:left += 1else:right -= 1area = b_len * h_lenif area > result:result = areareturn result

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


结语

咋说捏~!~

C++和Java用同一个方法

C++比Java慢,emmmmmmmmmmmmmmmmmmmmmmmmmmmm

不理解

那我直接得出结论

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

再见┏(^0^)┛

这篇关于力扣最热一百题——盛水最多的容器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/366076

相关文章

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的

C++ STL关联容器Set与集合论入门

1. 简介 Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树,其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候其都会自动进行排序。因此,Set中的元素总是顺序的。 Set的性质有:数据自动进行排序且数据唯一,是一种集合元素,允许进行数学上的集合相

【数据结构与算法 | 灵神题单 | 删除链表篇】力扣3217, 82, 237

总结,删除链表节点问题使用到列表,哈希表,递归比较容易超时,我觉得使用计数排序比较稳,处理起来也不是很难。 1. 力扣3217:从链表中移除在数组中的节点 1.1 题目: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后,返回修改后的链表的头节点。 示例 1: 输入: nums = [1,2,3], head = [1,2,3,

Spring容器上下文

目录 一 什么是spring容器上下文 二 spring容器上下文可以做什么 三 如何使用 1.实现ApplicationContextAware接口 2.代码测试 一 什么是spring容器上下文 你可以把它理解成就是spring容器,它主要用于管理Bean对象,包括bean的生命周期,bean的注入等等。 二 spring容器上下文可以做什么 我们刚刚上面

力扣 739. 每日温度【经典单调栈题目】

1. 题目 理解题意: 1.1. 给一个温度集合, 要返回一个对应长度的结果集合, 这个结果集合里面的元素 i 是 当前 i 位置的元素的下一个更高温度的元素的位置和当前 i 位置的距离之差, 若是当前元素不存在下一个更高温度的元素, 则这个位置用0代替; 2. 思路 本题用单调栈来求解;单调栈就适用于来求当前元素左边或者右边第一个比当前元素大或者小的元素;【单调栈:让栈中的元素保持单调

Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentLinkedDeque

文章目录 ConcurrentLinkedDeque特点构造方法常用方法使用示例注意事项 ConcurrentLinkedDeque ConcurrentLinkedDeque 是 Java 并发工具包(java.util.concurrent 包)中的一个线程安全的双端队列(Deque)实现,实现了 Deque 接口。它使用了链表结构,并且针对高并发环境进行了优化,非常适合