博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从头做leetcode之leetcode 42 接雨水
阅读量:2434 次
发布时间:2019-05-10

本文共 1369 字,大约阅读时间需要 4 分钟。

42.接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

在这里插入图片描述

上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)

暴力法

  • 一个坐标可以接水的多少在于两边最高高度的比较小的那个减去当前坐标高度
class Solution {
public: int trap(vector
& height) {
if(height.size() < 2) return 0; int res=0; for(int i=1;i < height.size()-1;i++){
int left = 0,right = 0; for(int j=0;j < i+1;j++){
if(height[j] > left) left = height[j]; } for(int j = i;j < height.size();j++){
if(height[j] > right) right = height[j]; } res += min(left,right)-height[i]; } return res; }};

通过时间:

在这里插入图片描述

双指针

  • 用双指针优化上个暴力法,把时间复杂度降到O(n)。
class Solution {
public: int trap(vector
& height) {
if(height.size() < 2) return 0; int res=0; int left=0,right=height.size()-1; int maxleft=0,maxright=0; while (left <= right) {
if (maxleft <= maxright) {
if(height[left] > maxleft) maxleft = height[left]; res += maxleft - height[left]; left++; } else {
if(height[right] > maxright) maxright = height[right]; res += maxright - height[right]; right--; } } return res; }};

通过时间:

在这里插入图片描述

转载地址:http://wsemb.baihongyu.com/

你可能感兴趣的文章
Routing
查看>>
linux下access函数的应用
查看>>
linux系统调用之文件:递归删除非空目录
查看>>
linux下获取系统时间的方法
查看>>
ubuntu12.04安装openCV2.4.6.1
查看>>
jsp与servlet的作用以及区别--为什么说JSP底层就是一个Servlet
查看>>
看HashMap源码前的必备冷知识,白话文式教学,适合刚开始了解源码的新手观看
查看>>
Oracle安装指南
查看>>
Cookie对象入门详解
查看>>
通过Form表单一次性拿到json格式数据,及后台接收
查看>>
Mybatis异常:The content of elements must consist of well-formed.......(一般出现在写分页/带大于小于号的SQL)
查看>>
Mybatis光速入门(配置文件模块)
查看>>
手撕HashMap的resize()方法源码渗透解析+图解
查看>>
Mybatis常见异常类型Could not set parameters for mapping离不开这个原因!
查看>>
JAVA如何实现短信验证码--阿里云接口,新手式图文教学,个人项目有这一篇就够了
查看>>
Java中大小数BigDecimal的加减乘除用法及场景的详细介绍,看完不信你还会报Syntax error on token “+/-/*“, invalid AssignmentOperat异常
查看>>
UVa 10917 Dijkstra
查看>>
CF403B/CF402D
查看>>
CF402E / 403C
查看>>
cf404c
查看>>