首页 > 其他分享 >LeetCode:盛最多水的容器(11)

LeetCode:盛最多水的容器(11)

时间:2024-09-05 19:55:21浏览次数:15  
标签:11 right 复杂度 ret height 数组 最多水 LeetCode left

目录

题目

代码思路

1、暴力求解

2、双指针

代码实现


题目

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

代码思路

1、暴力求解

时间复杂度:O(N^2)

空间复杂度:O(1)

(以整形数组heigh[] = [1,8,6,2,5,4,8,3,7]为例)

 用数组第一个数据1与其他的数据逐个计算,记录最大的值,然后用数组第二个数据做同样的操作,然后与第一次计算的最大值比较,得到较大的值用于下次比较,然后重复操作即可。

注:此题用此方法的时间复杂度过高,不能通过。 


2、双指针

时间复杂度:O(N)

空间复杂度:O(1)

 (以整形数组heigh[] = [6,1,5,2]为例)

我们用两个自变量记录数组两边的值,若我们将数值高的变量向数值低的变量移动,我们可以发现结果越来越小或不变,若我们将数值低的变量向数值高的变量移动呢?

 

我们可以发现会出现最大值,如果数组变长一点可能会有跟多的情况,我们可以记录每次移动的结果与上一次比较就可以得到最大的值。


代码实现

class Solution
{
public:
    int maxArea(vector<int>& height) 
    {
        //得到数组左右两边的数据
        int left = 0, right = height.size() - 1; 
        int ret = 0;

        while(left < right)
        {
            //取最小的值作为高与它们之间的距离相乘
            int v = min(height[left], height[right]) * (right - left);

            //得到较大的结果
            ret = max(ret, v);

            //判断左右哪边移动
            if(height[left] < height[right]) 
                left++;
            else
                right--;
        }

        return ret;
    }
};

标签:11,right,复杂度,ret,height,数组,最多水,LeetCode,left
From: https://blog.csdn.net/Another_Shi/article/details/141938070

相关文章

  • 11.面向对象(3)
    MODULE11 面向对象会定义接口会在接口中定义抽象方法,默认方法,静态方法,成员变量会调用接口中的成员会利用多态的方式new对象知道多态的前提要知道使用多态的好处会在多态的前提下,向下转型会利用instanceof判断类型一.接口(一)接口的介绍1.接口:是一个引用数据类型,是一个标......
  • LeetCode 3174. 清除数字(字符串、模拟)
    题目:3174.清除数字思路:用字符串t模拟操作要求,当x是数字时,删除t的最后一个字符。不是的话,直接插入xclassSolution{public:stringclearDigits(strings){stringt="";for(autox:s){if('0'<=x&&x<='9'){......
  • 基于java的个性化图书推荐系统(11181)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发......
  • 基于springboot的乡村政务办公系统(11191)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • 9.5LeetCode
    80.删除有序数组重复项II给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。 思路:和删除有序数组的重复项1很......
  • 从 iPhone 14/13/12/11/Xs Max/Xs 恢复已删除的联系人
    拥有iPhone14/13,您肯定不希望设备发生任何意外,尤其是数据丢失。但意外总是难免,比如您发现重要的联系人在iPhoneXsMax或iPhoneXs上不见了。那么,您有什么办法可以恢复它们呢? 常见导致iPhone联系人丢失的原因操作不当导致联系人丢失;手机病毒感染;恢复至出厂设置而......
  • 滚雪球学MyBatis-Plus(11):多数据源配置
    前言在上期内容中,我们详细介绍了如何使用MyBatisPlus的代码生成器。通过代码生成器,我们能够根据数据库表结构自动生成实体类、Mapper接口、服务类、控制器和XML映射文件,大大提高了开发效率,并减少了重复劳动。同时,我们还探讨了如何进行代码生成器的自定义配置,使其生成......
  • Linux 内核 6.11 RC6 发布!
    2024年9月2日,Linux内核开发者LinusTorvalds宣布了Linux内核6.11的第六个候选版本(RC6)的发布。与以往的发布时间相比,由于Torvalds正在国外旅行,这次的RC6提前半天发布。这是6.11版本开发周期的又一部分,主要是继续修复和稳定系统的各个组成部分,特别是文件系统、......
  • 读书笔记(11)《围城》
    序言钱钟书先生最经典的作品,也是仅有的一部长篇小说,堪称中国现代文学史上风格独特的讽刺经典,被誉为“新儒林外史”,自上世纪八十年代以来一直横贯常销、畅销小说之首。小说塑造了抗战初期以方鸿渐为主的一类知识分子群像,记叙了他们所面临的教育、婚姻和事业困境。虽然有具体的历史......
  • 11个行之有效的方法帮助建立持久的客户关系
    有些机构能够建立起稳固的客户基础,并在多年的发展中不断加强,而另一些则经历风雨后最终关闭。那么差别在哪里呢?答案是客户关系。良好的客户关系能带来项目和活动的巨大成功,忠诚的客户会长期保持合作并介绍新客户,品牌声誉也会因此提升。更棒的是,这还能让日常工作更加愉快。那么,......