leetcode 盛水最多的容器 解析】的更多相关文章

采用双指针法: 主要思想:定义头尾两个指针,分别向中间遍历,当相遇时结束循环.存储每一次遍历容器盛水的最大容量,并不断更新. 盛水的最大容量为 左右指针高度的最小值 乘以 左右指针的距离即宽度. 则可以得到最终的盛水容量.每一次比较头尾指针的高度,若头比尾高 则尾指针向左移动,若头比尾低,则头指针向右移动. 1 var maxArea = function(arr) { 2 var ans = 0; 3 var head = 0; var tail = arr.length-1; 4 while…
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水. 说明:你不能倾斜容器,且 n 的值至少为 2 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7].在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49. 代码如下: class Solution: def maxArea(sel…
class Solution { public: int maxArea(vector<int>& height) { //双指针法:从最宽的容器开始计算,当更窄的容器盛水量要大于之前容器,那必须比之前容器高,因此可以移动两个指针,直到最窄time O(n),space O(1); ; ; ; while(low<high){ int h=min(height[low],height[high]); volume=max(volume,h*(high-low)); if(heig…
这是悦乐书的第350次更新,第375篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第5题(顺位题号是11).给定n个非负整数a1,a2,-,an,其中每个表示坐标(i,ai)处的点.绘制n条垂直线,使得线i的两个端点位于(i,ai)和(i,0).找到两条线,它们与x轴一起形成一个容器,这样容器就含有最多的水. 注意:您可能不会倾斜容器,n至少为2. 上面的垂直线由数组[1,8,6,2,5,4,8,3,7]表示. 在这种情况下,容器可容纳的最大水面积(蓝色部分)为…
Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a contain…
题目描述: 方法一:双指针 class Solution: def maxArea(self, height: List[int]) -> int: left = 0 right = len(height)-1 area = 0 while left<right: cur = min(height[left],height[right])*(right-left) area = max(cur,area) if height[left]<height[right]: left+=1 el…
题目:接雨水 难度:hard 题目内容: Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. The above elevation map is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In…
最近刚好学习完成数据结构与算法相关内容: Data-Structures-and-Algorithm-Analysis 想结合Java中的容器类加深一下理解,因为之前对Java的容器类理解不是很深刻,且在网上找了半天没有找到太好的关于容器类细节的讲解(其中找到一些博客,讲得很好,但是其中还是有些东西没有触碰到我原来的理解痛点),还是决定自己写一个Java容器解析系列. <Java编程思想>书中对容器进行完整的类关系图如下: 官方文档:Java Collection Framework 本系列将…
题目难度:Medium Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis form…
Given a string representing arbitrarily nested ternary expressions, calculate the result of the expression. You can always assume that the given expression is valid and only consists of digits 0-9, ?, :, T and F (T and Frepresent True and False respe…
1.IOC是什么 IOC-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制. DI-Dependency Injection,即"依赖注入":组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中.依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活.可扩展的平…
最近一段时间,“容器”两个字一直萦绕在我的耳边,甚至是吃饭.睡觉的时候都在我脑子里蹦来蹦去的.随着这些天一次次的交流.讨论,对于容器的理解也逐渐加深.理论上的东西终归要落实到实践,今天就借助spring容器实现原理,简单说说吧. 简单的说,Spring就是通过工厂+反射将我们的bean放到它的容器中的,当我们想用某个bean的时候,只需要调用getBean("beanID")方法. 原理简单介绍: Spring容器的原理,其实就是通过解析xml文件,或取到用户配置的bean,然后通过反…
目录 Spring IoC容器 ApplicationContext设计解析 BeanFactory ListableBeanFactory HierarchicalBeanFactory MessageSource ApplicationEventPublisher EnvironmentCapable ResourceLoader和ResourcePatternResolver Spring IoC容器设计复盘 本文思维导图 在Spring框架中最重要的是Spring IoC容器,它是Spr…
目录结构: contents structure [-] 顺序容器 顺序容器的种类 顺序容器的操作 容器操作可能使迭代器失效 Vector容器的增长机制 容器适配器 关联容器 关联容器的分类 关联容器操作 关联容器对关键字的要求 pair类型 关联容器迭代器 元素的访问.修改.添加和删除 无序容器 无序容器对关键字类型的要求 无序容器桶的管理 1 顺序容器 1.1 顺序容器的种类 类型 描述 vector 可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢. deque 双端…
给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目. 对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果.注意,允许有多个孩子同时拥有 最多 的糖果数目. 示例 1: 输入:candies = [2,3,5,1,3], extraCandies = 3 输出:[true,true,true,false,true] 解释: 孩子 1 有 2 个糖果,如…
通常在Flex种有两种形式的容器:布局和导航. 在容器中我们可以同时设置一些空间和子容器,我们可以叫在容器内定义的任何组件为该容器的孩子. 在一个Flex程序的根部是一个叫做Application Container的容器,代表整个Flash Player的画图面板,这个容器用来装载该程序中其他所有的控件和子容器. 不同的容器定义了不同的布局规则:      除了Canvas容器外,其他所有的容器都自持自动(automatic)布局,在这种类型的布局中,我们不需要去举止指定一个组件的坐标(x,y…
前面介绍了List和Queue相关源码,这篇开始,我们先来学习一种java集合中的除Collection外的另一个分支------Map,这一分支的类图结构如下: 这里为什么不先介绍Set相关:因为很多Set实现类是通过对应的Map来实现,使用Map中key不能重复的特性,往Set中add元素的本质就是Map的put(),这里先介绍Map,后续介绍Set的时候再做具体介绍 首先,我们来看Map接口: /** Map将key映射到value(存储键值对); 一个map不能存在重复的key; 一个k…
在Java中,对于所有的Collection,都有一个特性,可以通过迭代器来遍历和删除其中的元素,因为Collection接口继承自Iterable接口. public interface Collection<E> extends Iterable<E> Iterable接口中只有一个方法: /** 该接口的实现类可以被用于"foreach"语句 * @since 1.5 */ public interface Iterable<T> { // 返…
[抄题]: Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a co…
参考: https://www.iteye.com/topic/1121913(自动注入bean的扫描器) https://m.imooc.com/mip/article/34150(循环依赖的解决方案) https://blog.csdn.net/why_2012_gogo/article/details/57413824(bean生命周期) https://www.jianshu.com/p/d511bcb502c3(自动注入) 一.bean初始化的基本步骤 1.使用构造函数,创建一个bea…
[9] Palindrome Number [Easy] 给一个数字,用不转化成字符串的方式判断它是否是回文. 先求数字长度,然后把数字的后半段做翻转(就是不断地取模,除10这种方式),然后判断前后半段是否相等 有特殊情况,负数,10的倍数, 和零 class Solution { public: bool isPalindrome(int x) { || x % == && x != ) { return false; } //=============[1]先求数字长度 ; int t…
关于WeakHashMap其实没有太多可说的,其与HashMap大致相同,区别就在于: 对每个key的引用方式为弱引用; 关于java4种引用方式,参考java Reference 网上很多说 弱引用指向 Entry,这种说法是完全错误的 在key被回收时,对应的value并没有回收,只有在调用WeakHashMap的方法时才会回收value; 具体请看下列源码解析: /** * 数据结构原理几乎与HashMap一致; * WeakHashMap 不会阻止Entry.key被回收; * Weak…
ArrayDeque,从名字上就可以看出来,其是通过数组实现的双端队列,我们先来看其源码: /** 有自动扩容机制; 不是线程安全的; 不允许添加null; 作为栈使用时比java.util.Stack快; 作为队列使用时比LinkedList快; 支持fast-fail; * @since 1.6 */ public class ArrayDeque<E> extends AbstractCollection<E> implements Deque<E>, Clone…
Comparable和Comparator接口是两个用于对对象进行大小比较的接口,在java集合相关类中,也被经常地使用到. 关于其使用,可以参考网络上的其他博客(没什么好说的);这里阐述关于这两个接口的区别,直接看源码即可: package java.lang; // 在java.lang包下 /** * 该接口的实现类: * 1. 本身具有排序的能力,我们称之为该类的自然排序,其compareTo()方法就称为该类的自然排序方法; * 2. 数组或List,可以使用Collections.s…
PriorityQueue:优先级队列; 在介绍该类之前,我们需要先了解一种数据结构--堆,在有些书上也直接称之为优先队列: 堆(Heap)是是具有下列性质的完全二叉树:每个结点的值都 >= 其左右子结点的值,称为最大堆(Max Heap,或称大顶堆);每个结点的值都 <= 其左右子结点的值,称为最小堆(Min Heap,或称小顶堆): Note:上述定义摘自<大话数据结构>,其定义并不是很准确,堆有很多种,完全二叉树只是其一种实现方式,也是最常见的一种实现方式.在<数据结构…
首先我们来看一下Queue接口: /** * @since 1.5 */ public interface Queue<E> extends Collection<E> { // 添加指定元素,在添加失败时(队列满),抛出IllegalStateException boolean add(E e); // 添加指定元素,在添加失败时(队列满),返回false boolean offer(E e); // 删除并返回头部,当队列为空时,抛出NoSuchElementException…
ArrayList 这里关于ArrayList本来都读了一遍源码,并且写了一些了,突然在原来的笔记里面发现了收藏的有相关博客,大致看了一下,这些就是我要写的(╹▽╹),而且估计我还写不到博主的水平,这里直接将收藏的博客列出来: 从源码角度彻底搞懂ArrayList 这篇博客的重要内容包括: 1. ArrayList使用的数据结构; 2. ArrayList的增删改查实现方式和时间复杂度分析; 3. ArrayList的自动扩容机制; 4. ArrayList的随机访问特性; 5. ArrayLi…
AbstractSequentialList为顺序访问的list提供了一个骨架实现,使实现顺序访问的list变得简单; 我们来看源码: /** AbstractSequentialList 继承自 AbstractList,是 List 接口的简化版实现.只支持按顺序访问,而不像 AbstractList 那样支持随机访问. 如果要支持随机访问,应该继承自AbstractList; 想要实现一个支持按次序访问的List的话,只需要继承该类并实现size()和listIterator()方法; 如…
做为数据结构学习的常规,肯定是先学习线性表,也就是Java中的List,开始 Java中List相关的类关系图如下: 此篇作为对Java中相关类的开篇.从上图中可以看出,List和AbstractList是表的具体实现类的抽象. 首先我们来看一下List接口: /** list 表示一个序列,与Set不同,list通常允许重复元素和null; list还提供了一个特别的迭代器,ListIterator,其允许对元素进行插入和替换,并且允许双向的查询; 因为可以向list中添加自身,这时就需要注意…
在通向具体化的List,Queue之前,我们需要先了解一下Collection接口和AbstractCollection抽象类,这两个都是处于Collection顶层的存在. Collection接口,是Collection hierarchy的根接口,我们来看其定义了哪些必须实现的方法: /** Collection接口,是CollectionC hierarchy的根接口. 一个Collection表示一些元素对象的聚集; 一些Collection的实现类允许重复的元素对象,另一些不允许:…