力扣【LeetCode】—— 11. 盛最多水的容器【java】

题目地址:https://leetcode-cn.com/problems/container-with-most-water/

题目:
 给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:
 不能倾斜容器。
示例:

解法一(暴力求解):
 思路:遍历计算最大值,两层循环,选中一条垂直线,然后根据这条线依次遍历后面的,根据最短的线计算面积,获取最大值即可

public class ContainerWithMostWater {// 暴力求解    public static int maxArea(int[] height) {int area = 0;        for (int i = 0; i < height.length; i  ) {// j 从 i位置后面一个开始            for (int j = i   1; j <height.length; j  ) {// Math.min(height[i],height[j]) * (j-i) 计算面积            // 和原来计算结果比较大小 ,择大即可                area = Math.max(area,Math.min(height[i],height[j]) * (j-i));            }        }        return area;    }    public static void main(String[] args) {int[] arr = new int[]{4,3,2,1,4};        System.out.println(maxArea(arr));    }}

解法二(双指针移动)— 参考官网:
 思路:首先用第一根和最后一根做比较,可以计算出矮的那根对应的最大面积(装水只能装到矮的那个的高度),同时可以在后面的计算中排除矮的这根,这样依次按照同样的方式从两边向中间靠拢,并计算面积,找到最大值即可。
 示例图(来源:leetcode官网)

写法一(参考官网):

/** * 参考官方解法(双指针) */public int maxArea3(int[] height) {int area = 0;    int i = 0,j = height.length-1;    while (i < j) {int minH = Math.min(height[i],height[j]);        area = Math.max(area,minH * (j-i));        if (height[i] < height[j]) {i   ;        }else {j --;        }    }    return area;}

另一种写法

到网站翻到一种牛掰写法(原理和上一种解法一致)

/** * 到国外网站翻到了一种牛掰写法(原理和上一种解法一致) */   public int maxArea(int[] height) {int area = 0;    for (int i = 0,j = height.length-1; i<j;) {int minH = height[i] < height[j] ? height[i  ] : height[j--];        //j-i加1的原因是上面i  /j--的时候向右或向左移动了一格,方便下次遍历        //所以在进行当前计算的时候要还原到原来横坐标的宽度        area = Math.max(area, minH * (j - i  1));    }    return area;}

上一种写法进行简单的优化

// 再优化,将j-i的操作提到 i   j-- 操作的前面public int maxArea(int[] height) {int area = 0;    for (int i = 0,j = height.length-1; i<j;)        area = Math.max((j-i)* (height[i] < height[j]?height[i  ]:height[j--]),area);    return area;}

参考如上写法,对第二种解法简单进行简单改造
后面几种的写法思路、本质都是一样,只是写法有些不同而已

public static int maxArea4(int[] height) {int area = 0;    int i = 0,j = height.length-1;    while (i < j) {int minH = height[i] < height[j] ? height[i  ] : height[j--];        area = Math.max(area,minH*(j-i 1));    }    return area;}

来源:https://www.icode9.com/content-1-762201.html

(0)

相关推荐

  • ​LeetCode刷题实战53:最大子序和

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • LeetCode之Sum of Two Integers

    LeetCode之Sum of Two Integers

  • ​LeetCode刷题实战223:矩形面积

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战310:最小高度树

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战42:接雨水

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战417:太平洋大西洋水流问题

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战326:3的幂

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • ​LeetCode刷题实战14: 最长公共前缀

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  • (1条消息) 漫画:腾讯面试题(盛最多水的容器)

    今天是小浩算法"365刷题计划"第54天.为大家分享一道鹅厂的面试题.话不多说,直接看题目. 01 PART 盛最多水的容器 这道题目会了的朋友可能觉得很简单,但是我觉得这题实在很 ...

  • 【胜任力】第11期录取人员名单公布

    中国临床营养网(lcyycc) 活动负责人 许桢 阜外华中心血管病医院营养科副主任 公共卫生硕士 中国医师协会营养医师专业委员会青年委员,河南省医院协会医院营养与食品安全管理分会副秘书长,郑州营养学会 ...

  • 算法创作|力扣题—返回不重复字符的最长字串长度

    问题描述给定一个字符串,请你找出其中不含有重复字符的最长子串的长度.示例 1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc" ...

  • 小米618发力,小米11直降500元!

    在即将到来的618电商活动中,小米11更是开启了"大降价"模式,,而且幅度不小,十分有看点.以8GB+128GB版小米11降幅达到了400元,而8GB+256GB版小米11降幅达到 ...

  • 太阳系新知 11 | 水星有水吗?信使号告诉我们答案

    北京时间 2014 年 10 月 8 日傍晚 5 点 30 分,太阳刚刚西沉,天色渐暗,美丽的晚霞,还在西边的天空中绽放着余晖.南京紫金山天文台的天堡城观景平台上已经人头攒动,人们正在翘首以待,等着一 ...

  • 一个小朋友问到的这个题目,14分扣了11...

    一个小朋友问到的这个题目,14分扣了11...

  • 盛泽水环境治理持续加码

    王江泾断面位于王江泾北虹桥东北侧,监测京杭运河和清溪河汇总至王江泾北虹桥水质,考核要求为三类.今年以来,断面水质波动状况频发,未达到三类水质的要求. 为尽快改善断面水质,盛泽镇认真分析水污染防治重点, ...

  • 精准发力 分类施策——盛泽加快推进市场有机更新

    精准发力 分类施策 --盛泽加快推进市场有机更新 昨天下午,吴江高新区(盛泽镇)召开市场有机更新第三次专题会议.区.镇领导沈春荣.赵菊观及镇党政办.建设局.经发局.财政局.市管办."三治&q ...

  • 白术——治疗脾虚湿盛,水湿内停之水肿,效...

    白术--治疗脾虚湿盛,水湿内停之水肿,效果尤为显著. 白术甘苦而温,气味芳香,专入脾胃二经.甘温补中,苦温燥湿,芳香能健脾,为培补脾胃之要药,前人誉之为"脾脏补气健脾第一要药".脾 ...