2019-02-28-算法-进化(盛最多水的容器)

题目描述
给定 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。

示例:

输入: [1,8,6,2,5,4,8,3,7]
输出: 49

我的优化后的解题方案

public int maxArea(int[] height) {int max=0, i_max=0, j_max=0;for(int i=0;i<height.length-1;i++) {if(height[i] > i_max) {i_max = height[i];j_max=0;for(int j=height.length-1;j>i;j--) {if(height[j] > j_max) {j_max = height[j];max = Math.max(Math.min(height[i], height[j])*(j-i), max);}}}}return max;}

复杂度分析

时间复杂度:O(n^2)
空间复杂度:O(1),使用恒定的额外空间。

参考标准答案优化后的
标准答案思路为双指针法,只需要扫描一次即可
方法解释:
最初我们考虑由最外围两条线段构成的区域。现在,为了使面积最大化,我们需要考虑更长的两条线段之间的区域。如果我们试图将指向较长线段的指针向内侧移动,矩形区域的面积将受限于较短的线段而不会获得任何增加。但是,在同样的条件下,移动指向较短线段的指针尽管造成了矩形宽度的减小,但却可能会有助于面积的增大。因为移动较短线段的指针会得到一条相对较长的线段,这可以克服由宽度减小而引起的面积减小。
证明过程:https://leetcode.com/problems/container-with-most-water/discuss/6089/anyone-who-has-a-on-algorithm

public class Solution {public int maxArea(int[] height) {int maxarea = 0, l = 0, r = height.length - 1;while (l < r) {maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l));if (height[l] < height[r])l++;elser--;}return maxarea;}
}

复杂度分析

时间复杂度:O(n)
空间复杂度:O(1),使用恒定的额外空间。

持续精进中,加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAP 2.6 版本发布通告

前言今天&#xff0c;我们很高兴宣布 CAP 发布 2.6 版本正式版。同时我们也很高兴的告诉你 CAP 在 GitHub 已经突破了3000 Star.自从上次 CAP 2.5 版本发布 以来&#xff0c;已经过去了几个月的时间&#xff0c;关注的朋友可能知道&#xff0c;在这几个月的时间里&#xff0c;也…

皮克定理(题目)

Area 皮克定理&#xff1a;皮克定理是指一个计算点阵中顶点在格点上的多边形面积公式&#xff0c;该公式可以表示为Sab2&#xff0d;1&#xff0c;其中a表示多边形内部的点数&#xff0c;b表示多边形落在格点边界上的点数&#xff0c;S表示多边形的面积。 /*Author : lifehap…

随机算法

概率论基础知识 期望的线性性 马尔可夫不等式 条件概率 独立事件 独立随机变量 随机算法 Las Vegas型随机算法 随机快速排序 随机选择 随机n皇后放置 将确定性算法的某一步修改为随机选择&#xff0c;有可能可以优化算法平均时间下的算法复杂度。 Monte Carlo型算法 主元…

求助:现在有一个可以进体制“养老”的坑,我该不该跳?

对不起&#xff0c;在当下互联网人生活的环境中&#xff0c;并没有可以“养老”的坑。对不起&#xff0c;在当下互联网人生活的环境中&#xff0c;也没有绝对”稳定“的企业。技术人的职业发展&#xff0c;以”适者生存“为核心原则&#xff0c;每一种职业环境都有相应的职业成…

Java修炼之路——基础篇——Java集合类详解2

Set和List区别&#xff1f;Set如何保证元素不重复&#xff1f; Set、List都实现了Collection接口&#xff0c;List是有序的列表&#xff0c;Set是无序的集合&#xff08;TreeSet有序&#xff09; List实现类&#xff1a; ArrayList &#xff1a;基于数组&#xff0c;可动态扩…

Legacy(线段树优化建边跑Dijkstra)

Legacy 线段树优化建边&#xff0c;开两颗线段树&#xff1a; 对于线段树1&#xff0c;自顶向下连边。对于线段树2&#xff0c;自底向上连边。 然后对于op1我们直接连边即可。 对于op2&#xff08;u -> [l, r] cost w&#xff09;&#xff0c;这个操作在线段树1上完成即可…

P5273 【模板】多项式幂函数 (加强版)

P5273 【模板】多项式幂函数 (加强版) 这道题和原来的题目唯一区别就在于这道题没有限制F[0]1&#xff0c;所以我们就不能直接取ln了&#xff0c;但是我们实际上有办法转换一下&#xff0c;让它最低次项为1&#xff0c;只需要除以最后一个非0项即可&#xff0c;然后最后再乘回…

给 asp.net core 写个中间件来记录接口耗时

给 asp.net core 写个中间件来记录接口耗时Intro写接口的难免会遇到别人说接口比较慢&#xff0c;到底慢多少&#xff0c;一个接口服务器处理究竟花了多长时间&#xff0c;如果能有具体的数字来记录每个接口耗时多少&#xff0c;别人再说接口慢的时候看一下接口耗时统计&#x…

2019-03-1-算法-进化(整数转罗马数字)

题目描述 罗马数字包含以下七种字符&#xff1a; I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …

brz的函数(mobius)

brz的函数 ∑i1n∑j1nμ(ij)假设i,j不互质&#xff0c;一定有μ(ij)0所以上式∑i1n∑j1nμ(ij)[gcd(i,j)1]积性函数性质有μ(ij)μ(i)μ(j)∑i1n∑j1nμ(i)μ(j)[gcd(i,j)1]∑i1n∑j1nμ(i)μ(j)∑d∣gcd(i,j)μ(d)这里我们按照套路把d给提前去&#xff0c;因为i,j都要是d的倍数…

CF1251F Red-White Fence(多项式/背包问题/组合数学)

CF1251F Red-White Fence 现在给出了n个白板&#xff0c;m个红板&#xff0c;然后将其按照题目要求放成一排&#xff0c;要求最终周长为qi的方案数。 首先因为有高度的单调性&#xff0c;所以我们可以直接把周长转化为红板的高度和白板的数量&#xff0c;然后因为红板数量很少…

Java修炼之路——基础篇——枚举

枚举的用法 每个枚举变量其实都是枚举类的一个实例。 枚举与单例 各种模式的单例模式&#xff0c;包括枚举实现的单例 //懒汉模式 class SingletonA {private static SingletonA instance new SingletonA();//保证不能通过new SingletonB的方式创建对象private SingletonA()…

Docker(二)-在Docker中部署Nginx实现负载均衡【完整教程】

一、前言【查看完整视频教程&#xff08;免费&#xff09;&#xff0c;请拉直文尾】在前面的文章中我们已经介绍了如何在Centos7系统中安装Docker以及利用Docker进行Asp.Net Core应用的部署。在本文中&#xff0c;我们将继续介绍利用Docker部署Nginx服务实现负载均衡。文章最后…

HDU 6127 Hard challenge(极角 + 二分)

Hard challenge 思路 通过极角排序&#xff0c;这里通过修改后&#xff0c;所有点的角度在[0,2π)[0, 2 \pi)[0,2π)之间&#xff0c; 然后O(n)O(n)O(n)扫一趟&#xff0c;对当前在的级角加上π\piπ就是我们要找的角度了&#xff0c;这里通过二分来实现查找。 接下来就只要…

P2664 树上游戏(点分治/计数题计算贡献/树上差分)

P2664 树上游戏 对于树上n个点&#xff0c;每个点有不同颜色&#xff0c;求解每个点到其他点的路径上不同颜色个数之和。 首先看到这种树上点对问题&#xff0c;我们可以想到点分治&#xff0c;然后考虑每次分治如何求解答案&#xff0c;本质上就是一个数颜色的问题&#xff…

2019-03-4-算法-进化(罗马数字转整数)

题目描述 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000例如…

设置ABP默认使用中文

ABP提供的启动模板, 默认使用是英文:虽然可以通过右上角的菜单切换成中文, 但是对于国内项目来说, 默认使用中文是很正常的需求.前期准备使用ABP CLI创建一个名为AbpStudy的ASP.NET MVC项目:abp new AbpStudy关于MVC的启动模板可以看文档, 这里就不赘述.使用ABP版本的是当前最新…

P3835 【模板】可持久化平衡树

P3835 【模板】可持久化平衡树 好久没有打平衡树了&#xff0c;赶紧来复习一下&#xff0c;平衡树这种东西还是很有用的&#xff0c;可以很灵活地解决一些问题。 fhq_treap 这道题是可持久化的权值平衡树&#xff0c;支持以下几个操作 1、 插入 xxx 2、 删除 xxx&#xff08…

基础篇--Java IO--概览

字符流、字节流、输入流、输出流 Java 中使用IO&#xff08;输入输出&#xff09;来读取和写入&#xff0c;读写磁盘文件、内存、网络数据。输入输出是相对内存而言&#xff0c;往内存中读数据就为输入流&#xff0c;从内存中往外写就是输出流。 根据处理类型分为字符流、字节…

半平面交练习(计算几何)

四&#xff1a;半平面交 Rotating Scoreboard /*Author : lifehappy */ #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> #include <vector> #include <iostream>using namespace std;const double pi ac…