盛水最多的容器

https://leetcode.cn/problems/container-with-most-water/solutions/207215/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/?envType=study-plan-v2&envId=top-100-liked

 

         1、暴力求解

        我们可以固定一边,然后另一边逐渐向右移动,记录每次的面积大小,最后取所有面积中最大的一个。

int maxArea(int* height, int heightSize) {int maxarea = 0;for(int i = 0;i<heightSize-1;i++){for(int j = i+1;j<heightSize;j++){int area = 0;int len = j-i;int heigh = height[i];if(height[j] < height[i])heigh = height[j];area = len * heigh;if(area > maxarea)maxarea = area;}}return maxarea;
}

        暴力求解的时间复杂度为O(n^2),空间复杂度为O(n)。效率比较低。

        2、双指针

        关键词:左右两边。

        模式识别:需要移动左右两头的,就可以考虑双指针。

        我们将left指针定义在左边,right定义在右边。

        这题的难点在于如何移动双指针?

        首先我们要分析这题的面积是如何算的:

        底长 = right - left,两指针之差;高 = min{ height[left] , height[right] },两指针位置处数组的较小值。我们一来就将底长固定到最大的,底长我们是固定的,唯一不确定的就是高,所以我们就要从高来下手。

        求最大面积,自然要让高尽可能大,我们就可以让两指针处数组的较小值对应的指针去移动,因为较小值决定了面积的下限。假如 height [ left ]   < height[right]我们就让left去移动,如果left移动到height[left]>height[right],就让right去移动,反复进行下去;直到left >= right就结束。

        当然我们每次移动的时候也要记录该次面积,和maxarea进行比较,取较大值。

        代码如下:

int maxArea(int* height, int heightSize) {int maxarea = 0, left = 0, right = heightSize - 1;while (left < right) {int len = right - left;int heigh = height[left];if (height[left] > height[right])heigh = height[right];int area = len * heigh;if (area > maxarea)maxarea = area;if (height[left] < height[right])left++;elseright--;}return maxarea;
}

 

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

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

相关文章

[C++13]:stack queue priority_queue 模拟实现

stack && queue && priority_queue 模拟实现 一.stack1.概念&#xff1a;2.使用&#xff1a;3.模拟实现&#xff1a;一些题目&#xff1a;1.最小栈&#xff1a;2.栈的压入弹出序列&#xff1a;3.逆波兰表达式求值&#xff1a; 二.queue1.概念&#xff1a;2.使用…

Vue服务器端渲染(SSR)是不是技术的倒退?

一、什么是服务器端渲染&#xff0c;是不是技术退步&#xff1f; Vue服务器端渲染&#xff08;Vue Server-Side Rendering&#xff0c;简称SSR&#xff09;是一种将Vue组件在服务器端进行渲染&#xff0c;生成最终的HTML页面&#xff0c;然后将其发送给客户端的技术。 传统的V…

VBA快速智能拆分日期

实例需求&#xff1a; A列为待处理数据&#xff0c;日期有多种格式 单个日期&#xff1a;6.16同月简写时间段&#xff1a;7.7-8&#xff0c;其含为7.7-7.8跨月时间段&#xff1a;5.29-6.2 现在需要将A列日期&#xff0c;按照如下规则筛选&#xff0c;并提取开始日期和结束日…

【docker】linux系统docker的安装及使用

一、docker应用的安装 1.1 安装方式 Docker的自动化安装&#xff0c;即使用提供的一键安装的脚本&#xff0c;进行安装。 官方的一键安装方式&#xff1a;curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 国内 daocloud一键安装命令&#xff1a;curl -s…

springboot133在线课程管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

精品基于Uniapp+ssm学生成绩管理系统App

《[含文档PPT源码等]精品基于Uniappssm学生成绩管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;Java 后台框架&#xff1a;ssm 安卓框架&#xff1a…

C#,最小生成树(MST)普里姆(Prim)算法的源代码

Vojtěch Jarnk 一、Prim算法简史 Prim算法&#xff08;普里姆算法&#xff09;&#xff0c;是1930年捷克数学家算法沃伊捷赫亚尔尼克&#xff08;Vojtěch Jarnk&#xff09;最早设计&#xff1b; 1957年&#xff0c;由美国计算机科学家罗伯特普里姆独立实现&#xff1b; 19…

基础功能认识

文件传输方法 获取桌面文件 回传 3&#xff1a;FTP文件传输协议 进入和退出PYTHON界面 官方自带编译软件 设置中文 接下来安装C环境 安装Wiring库常见问题 终端窗口-------输入gpio -v-----------------输入gpio readall----可能报错&#xff0c;输入 输入gpio readall 可看…

uni-app 微信小程序之红包雨活动

文章目录 1. 页面效果2. 页面样式代码 1. 页面效果 GIF录屏有点卡&#xff0c;实际比较丝滑 每0.5s掉落一个红包控制4s后自动移除红包点击红包消除红包&#xff08;或者自行1&#xff0c;或者弹窗需求&#xff09; 2. 页面样式代码 <!-- 红包雨活动 --> <template>…

总结和考试

总结和考试 1. 代码规范1.1 名称1.2 注释1.3 todo1.4 条件嵌套1.5 简单逻辑先处理1.6 循环1.7 变量和值 2.知识补充2.1 pass2.2 is 比较2.3 位运算 3.阶段总结4.考试题 1. 代码规范 程序员写代码是有规范的&#xff0c;不只是实现功能而已。 1.1 名称 在Python开发过程中会创…

D55XT100-ASEMI整流桥D55XT100参数、封装、规格

编辑&#xff1a;ll D55XT100-ASEMI整流桥D55XT100参数、封装、规格 型号&#xff1a;D55XT100 品牌&#xff1a;ASEMI 正向电流&#xff08;Id&#xff09;&#xff1a;55A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1000V 正向浪涌电流&#xff1a;550A 正向…

shell脚本之循环语句

一 echo命令 echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符&#xff1a;要举例为证 二 date date查看当前系统时间 -d 你描述的日期&#xff0c;显示指定字符串所描述的时间&#xff0c;而非当前时间 %F 完整日期格式&#xff0c;等价于 %Y…