当前位置: 首页 > news >正文

(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

Method:双指针-盛最多水的容器

Idea:

双指针分别指向容器的左右边界,计算此时的容器容积,并与当前最大容积比较。

如果左边界低于右边界,说明此时左边界是短板,因此将左边界向右移动1。

如果右边界低于左边界,说明此时右边界是短板,因此将右边界向左移动1。

就这样,每次移动一边的边界让两个边界靠拢,直到两个边界重合时结束。

Code:

class Solution{
public:
    // 双指针-盛最多水的容器
    int maxArea(vector<int> &height){
        // 容器的最大容积
        int max_capacity=0;

        // 容器的左边界
        int left=0;
        // 容器的右边界
        int right=height.size()-1;

        // 如果左右边界没有靠拢,则保持循环
        while(left<right){
            // 记录左右两边中的最短边
            int width=0;
            if(height[left]<height[right]){
                width=height[left];
            }
            else{
                width=height[right];
            }

            // 比较容器的容积与当前最大容积
            if(max_capacity<width*(right-left)){
                // 如果容积变大,则更新当前最大容积的值
                max_capacity=width*(right-left);
            }

            // 如果左边是短板,则左边右移
            if(height[left]<height[right]){
                left++;
            }
            // 如果右边是短板,则右边左移
            else{
                right--;
            }

        }

        // 返回容器的最大容积
        return max_capacity;
    }
};

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/container-with-most-water
 

相关文章:

  • vue3 eventBus订阅发布模式
  • Maven的安装与配置以及注意事项
  • 【JavaWeb】JavaScript
  • MySQL常见操作
  • [ C++ ] STL_list 使用及其模拟实现
  • 树状数组笔记
  • 【ffmpeg】SDL视频显示
  • 【JavaEE进阶系列 | 从小白到工程师】正则表达式的语法使用
  • LIO-SAM框架:点云匹配前戏之初值计算及局部地图构建
  • 机器学习实战(5)——支持向量机
  • 手撕前端面试题(Javascript~事件委托、数组去重、合法的URL、快速排序、js中哪些操作会造成内存泄漏......
  • lombok学习
  • Vue操作数组的几种常用方法(map、filter、forEach、find 和 findIndex 、some 和 every)
  • 【Docker】傻瓜式开发
  • <数据结构> - 数据结构在算法比赛中的应用(上)
  • [Vue CLI 3] 配置解析之 css.extract
  • 10个确保微服务与容器安全的最佳实践
  • Android Volley源码解析
  • JAVA SE 6 GC调优笔记
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • LintCode 31. partitionArray 数组划分
  • Nodejs和JavaWeb协助开发
  • NSTimer学习笔记
  • php中curl和soap方式请求服务超时问题
  • Redis在Web项目中的应用与实践
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • Sequelize 中文文档 v4 - Getting started - 入门
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 安卓应用性能调试和优化经验分享
  • 关于List、List?、ListObject的区别
  • 将 Measurements 和 Units 应用到物理学
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 如何合理的规划jvm性能调优
  • 使用common-codec进行md5加密
  • 系统认识JavaScript正则表达式
  • 小程序开发中的那些坑
  • 用Canvas画一棵二叉树
  • 用mpvue开发微信小程序
  • 终端用户监控:真实用户监控还是模拟监控?
  • 【干货分享】dos命令大全
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​人工智能书单(数学基础篇)
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #13 yum、编译安装与sed命令的使用
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (补)B+树一些思想
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (篇九)MySQL常用内置函数
  • (七)Knockout 创建自定义绑定
  • (算法)前K大的和