LeetCode 算法:盛最多水的容器c++

原题链接🔗:盛最多水的容器
难度:中等⭐️⭐️

题目

给定一个长度为 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

提示
n == height.length
2 <= n <= 105
0 <= height[i] <= 104

题解

双指针

  1. 题解

LeetCode上的“盛最多水的容器”问题是一个典型的双指针问题,它要求你找到一个容器的形状,使得其盛水的体积最大。容器的形状由一个整数数组表示,其中每个元素代表容器在该位置的宽度。
这个问题可以通过以下逻辑来解决:

  • 初始化指针:设置两个指针 left 和 right,分别指向数组的开始和结束位置。

  • 计算面积:在每一步中,计算两个指针之间的面积。面积可以通过 min(height[left], height[right]) * (right - left) 来计算,其中 min(height[left], height[right]) 是两个指针中较小的高度,(right - left) 是两个指针之间的宽度。

  • 更新最大面积:将当前面积与之前记录的最大面积进行比较,并更新最大面积。

  • 移动指针:移动 left 或 right 指针以尝试找到更大的面积。选择移动哪个指针取决于 height[left] 和 height[right] 的值。如果 height[left] < height[right],则移动 left 指针,因为移动较短的边可以更快地尝试新的高度。反之,则移动 right 指针。

  • 循环结束条件:当 left 和 right 指针相遇时,循环结束。

  • 返回结果:返回记录的最大面积。

这个算法的关键在于理解,移动较短边的指针可以更快地探索新的高度,因为容器的面积由两个因素决定:宽度和高度。当宽度固定时,高度越小,面积越小。因此,通过移动较短边的指针,我们可以更快地找到可能的更大面积。

  1. 复杂度:时间复杂度O(N),空间复杂度O(1)。
  2. 代码过程:
  • 初始化两个指针 left 和 right 分别指向数组的开始和结束位置。
  • 在 while 循环中,计算当前面积 width *min(height[left], height[right]),其中 width 是两个指针之间的距离,min(height[left], height[right]) 是容器在当前指针位置的最小高度。
  • 更新 max_area 为当前面积和已知最大面积之间的较大值。
  • 移动较短边的指针,因为移动较长边的指针不会增加面积。
  • 当两个指针相遇时,循环结束。
  1. c++ demo:
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int maxArea(vector<int>& height) {
    int max_area = 0;
    int left = 0;
    int right = height.size() - 1;

    while (left < right) {
        int width = right - left;
        int current_area = width * min(height[left], height[right]);
        max_area = max(max_area, current_area);

        if (height[left] < height[right]) {
            left++;
        }
        else {
            right--;
        }
    }

    return max_area;
}

int main() {
    // 示例输入
    vector<int> height1 = { 1,8,6,2,5,4,8,3,7 };
    vector<int> height2 = { 1,1,1 };

    // 调用 maxArea 函数并打印结果
    cout << "Maximum water that can be trapped with height1: " << maxArea(height1) << endl;
    cout << "Maximum water that can be trapped with height2: " << maxArea(height2) << endl;

    return 0;
}
  • 输出结果:

Maximum water that can be trapped with height1: 49
Maximum water that can be trapped with height2: 2
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE——集合框架二(6/6)-(案例)补充知识:集合的嵌套(需求与分析、问题解决、运行测试)

目录 案例引入 需求与分析 问题解决 运行测试 集合的嵌套 顾名思义&#xff0c;指的是集合中的元素又是一个集合。 本篇通过一个案例对这一知识进行了解&#xff1a; 案例引入 需求与分析 要求在程序中记住如下省份和其对应的城市信息&#xff0c;记录成功后&#xff0…

【AI】llama-fs的 安装与运行

pip install -r .\requirements.txt Windows PowerShell Copyright (C) Microsoft Corporation. All rights reserved.Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindows(venv) PS D:\XTRANS\pythonProject>

【错误记录】HarmonyOS 运行报错 ( Failure[MSG_ERR_INSTALL_FAILED_VERIFY_APP_PKCS7_FAIL] )

文章目录 一、报错信息二、问题分析二、解决方案 一、报错信息 在 DevEco Studio 中 , 运行程序 , 编译时正常编译 , 但是在真机运行时 , 报如下错误 , 核心报错信息是 " Failure[MSG_ERR_INSTALL_FAILED_VERIFY_APP_PKCS7_FAIL] " ; 完整报错信息 : 05/29 10:58:55…

【软件全套资料】软件项目各阶段各类资料文档支撑,项目申报,立项,开发,运维,交付,售后,体系认证,评审资质

在软件开发过程中&#xff0c;文档扮演着至关重要的角色。它不仅记录了项目的需求、设计和开发过程&#xff0c;还为项目的维护和管理提供了便利。本文将详细介绍软件开发文档的重要性和作用&#xff0c;以及需求分析、软件设计、开发过程、运维管理和项目管理等方面的文档编写…

大数据治理平台建设解决方案(66页PPT)

方案介绍&#xff1a; 本解决方案旨在构建一个集数据集成、数据存储、数据处理、数据分析和数据安全于一体的大数据治理平台&#xff0c;帮助企业实现数据资产的统一管理和高效利用&#xff0c;提升业务决策效率和准确性。本大数据治理平台建设解决方案旨在为企业提供全面、高…

支持AMD GPU的llm.c

anthonix/llm.c: LLM training in simple, raw C/HIP for AMD GPUs (github.com) llm.c for AMD devices This is a fork of Andrej Karpathys llm.c with support for AMD devices. 性能 在单个7900 XTX显卡上使用默认设置&#xff0c;目前的训练步骤耗时约为79毫秒&#x…

使用IDEA在WSL2的Ubuntu的docker中运行项目

1、新建项目 1.1 从远程仓库拉取代码 2、配置环境 2.1 配置IDEA运行环境 2.1.1 配置JDK 注意&#xff1a;Ubuntu 20.04运行项目请使用JDK11&#xff0c;使用JDK8会编译报错&#xff0c;报错如下&#xff1a; 2.1.2 配置Maven 2.1.3 配置运行环境 2.1.4 配置远程Debug 2.2、配…

“两客一危”车辆综合监控信息化产品及应用分析

引言 随着科技的不断进步和社会的发展&#xff0c;“两客一危”车辆&#xff08;即长途客车、旅游包车和危险品运输车&#xff09;的安全监管问题日益凸显。为了提升车辆的安全性能和管理效率&#xff0c;综合监控信息化产品应运而生。本文将对这一产品进行详细介绍&#xff0…

【一百零一】【算法分析与设计】差分,1109. 航班预订统计,P4231 三步必杀,P5026 Lycanthropy

1109. 航班预订统计 这里有 n 个航班&#xff0c;它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings &#xff0c;表中第 i 条预订记录 bookings[i] [first(i), last(i), seats(i)] 意味着在从 first(i) 到 last(i) &#xff08;包含 first(i) 和 last(i) &#xff09;…

在Linux kali下载、安装Perl环境

目录 Perl介绍 下载安装 官网下载 在Windows安装 在Linux和Mac OS安装 Perl介绍 Perl一种功能丰富的计算机程序语言&#xff0c;运行在超过100种计算机平台上&#xff0c;适用广泛&#xff0c;从最初是为文本处理而开发的&#xff0c;现在用于各种任务&#xff0c;包括系统…

【Qt知识】Qt框架中的信号(Signals)与槽(Slots)机制

Qt框架中的信号&#xff08;Signals&#xff09;与槽&#xff08;Slots&#xff09;机制是一种强大的通信方式&#xff0c;允许对象之间相互通信而无需对象之间直接引用或了解对方。这一机制简化了应用程序的事件处理和组件之间的交互&#xff0c;是Qt的一大特色和核心概念。 …

【SQL学习进阶】从入门到高级应用【企业真题】

文章目录 第一题第二题第三题第四题第五题第六题第七题第八题第九题MySQL行转列使用case whengroup by完成 第十题 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f495;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01; &#x1f495;希望您在这…

【RuoYi】实现文件的上传与下载

一、前言 首先&#xff0c;最近在做一个管理系统&#xff0c;里面刚好需要用到echarts图和富文本编辑器&#xff0c;然后我自己去看了官网觉得有点不好懂&#xff0c;于是去B站看来很多视频&#xff0c;然后看到了up主【程序员青戈】的视频&#xff0c;看了他讲的echarts图和富…

社交媒体数据恢复:飞信

请注意&#xff0c;本教程只适用于飞信&#xff0c;并且不涉及推荐任何数据恢复软件。 一、备份飞信聊天记录 在开始恢复飞信聊天记录之前&#xff0c;我们建议您先备份现有的聊天记录。这样&#xff0c;即使恢复过程中出现问题&#xff0c;您也可以通过备份文件找回重要的聊…

搭建基于Django的博客系统增加广告轮播图(三)

上一篇&#xff1a;ChatGPT搭建博客Django的web网页添加用户系统&#xff08;二&#xff09; 下一篇&#xff1a;搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL&#xff08;四&#xff09; 功能概述 增加轮播图显示广告信息。 需求详细描述 1. 增加轮播图显示广告信…

python解决flask启动的同时启动定时任务

业务场景描述&#xff1a;在常规的开发中&#xff0c;我们开发接口服务&#xff0c;一般会将数据放在数据库、文件等第三方文件&#xff0c;启动服务后&#xff0c;服务到后台数据库中加载数据&#xff0c;这样做的好处当然是开发会更加便利以及数据的可复用性较高&#xff0c;…

一键实现文件夹批量高效重命名:轻松运用随机一个字母命名,让文件管理焕然一新!

在数字化时代&#xff0c;文件夹管理是我们日常生活和工作中不可或缺的一部分。然而&#xff0c;随着文件数量的不断增加&#xff0c;文件夹命名的繁琐和重复成为了一个让人头疼的问题。你是否曾因为手动一个个重命名文件夹而感到枯燥乏味&#xff1f;你是否曾渴望有一种方法能…

arm cortex-m架构 SVC指令详解以及其在freertos的应用

1. 前置知识 本文基于arm cortex-m架构描述&#xff0c; 关于arm cortex-m的一些基础知识可以参考我另外几篇文章&#xff1a; arm cortex-m 架构简述arm异常处理分析c语言函数调用规范-基于arm 分析 2 SVC指令 2.1 SVC指令位域表示 bit15 - bit12&#xff1a;条件码&#…

深入分析 Android BroadcastReceiver (一)

文章目录 深入分析 Android BroadcastReceiver (一)1. Android BroadcastReceiver 设计说明1.1 BroadcastReceiver 的主要用途 2. BroadcastReceiver 的工作机制2.1 注册 BroadcastReceiver2.1.1 静态注册2.1.2 动态注册 3. BroadcastReceiver 的生命周期4. 实现和使用 Broadca…

Android下HWC以及drm_hwcomposer普法(上)

Android下HWC以及drm_hwcomposer普法(上) 引言 按摩得全套&#xff0c;错了&#xff0c;做事情得全套&#xff0c;普法分析也是如此。drm_hwcomposer如果对Android图形栈有一定研究的童鞋们应该知道它是Android提供的一个的图形后端合成处理HAL模块的实现。但是在分析这个之前…