阿亮的算法之路——11. 盛最多水的容器

2024-01-07 02:59
文章标签 算法 容器 最多水 阿亮

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

题目描述

题目描述1

看起来挺复杂的,要考虑宽度、长度,还要考虑之前是否就已经存在最大的容量了。

首次尝试

是有点复杂,但如果用暴力,就很简单,思路简单,代码更简单。我一开始是想着用效率高一点的方式来做的,但想了好一会而也没有思路,所以决定先用暴力的方法做出来。

一写代码,发现暴力破解如此的简单:双层循环,从头开始遍历,每遍历到一个数,就从头遍历到当前位置,用一个变量记录最大的容量,遍历完成就ok。

代码
    public int maxArea(int[] height) {int max = height[0] < height[1] ? height[0]:height[1];for (int i = 2; i <  height.length; i++){int each = height[i];for (int j = 0; j < i; j++){int tempMax = (i-j) * (each < height[j]?each:height[j]);max = max > tempMax ? max:tempMax;}}return max;}

够暴力,够简单,这才是真正的暴力嘛,之前做的那些题,暴力解法甚至比用算法逻辑更复杂。

提交结果

提交结果1

结果也预料到了,肯定效率贼低。

大佬思路

其实我一开始的想法是,动态规划,因为可能需要和前面的最大值比较, 但是当前的所获取的最大值面积可能,好像也需要从前面去遍历,不太好确定。

索性去看了大佬的思路,大佬的思路是:双指针,从两头往中间遍历,记录最大的面积。还消除了最大的面积可能,也就是在移动的时候,只移动短板,不移动长板,因为移动短板可能会使面积增加,移动长板是一定不会使面积增加的,具体细节可以分析一下。

大佬的分析及题解:https://leetcode-cn.com/problems/container-with-most-water/solution/container-with-most-water-shuang-zhi-zhen-fa-yi-do/

我照着这个思路写出了代码:

		int max = 0;for (int i = 0,j=height.length-1; i < j;){int sho;if (height[i] < height[j]){sho = height[i];i++;}else{sho = height[j];j--;}max = Math.max(max,sho*(j-i+1));}return max;
提交结果

提交结果2

比暴力破解效率不知道高哪儿去了,优秀优秀!!

这篇关于阿亮的算法之路——11. 盛最多水的容器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.