算法(一)

news/2024/7/3 13:53:30

  

1.有一组表示墙的数组a[],其中a[i]表示第i个墙的高度,如下图,

假如下雨了,求墙里可以装多少水

 

 

如果我们从左至右遍历列表,每个下标水的量最多是到现在为止最大的数。这表示如果我们已知右边有相等或更大的,我们可以知道存下的水有多少。反向遍历的时候也一样:如果我们知道左边有比右边最大的数更大的,我们装水是毫无问题的。

基于这个想法,一个解决方法是:先找到最大值,从左遍历到最大值,然后从右遍历到最大值。这个方法需要两次遍历:一次找到最大值,另一次分成了两个子遍历。

 

优化:

假设区间的右边界比左边界高,则存水高度就是由左边界确定的,此时将左边界向右移动,途中就可以直接计算在该墙之上的存水量是多少。若在移动过程中遇到了比左边界高的墙,说明之前移动扫过的是一个单独的水坑。然后从右往左移动,直到全部扫描一遍。

 

        static int GetWater(int[] walls)
        {
            int left = 0;
            int right = walls.Length - 1;
            int maxLeft = walls[left];
            int maxRight = walls[right];
            int volume = 0;
            while (right > left)
            {

                if (maxLeft < maxRight)
                {//从左向右遍历
                    left++;
                    if (walls[left] > maxLeft)
                        maxLeft = walls[left];
                    else
                        volume += maxLeft - walls[left];
                }
                else
                {//从右向左遍历
                    right--;
                    if (walls[right] > maxRight)
                        maxRight = walls[right];
                    else
                        volume += maxRight - walls[right];
                }
            }

            return volume;
        }    

 

 

 

 

 

 

//

 

转载于:https://www.cnblogs.com/alex09/p/4830193.html


http://www.niftyadmin.cn/n/1811240.html

相关文章

阅读十一、十二章节

第11章 软件设计与实现 问题&#xff1a;典型的开发流程与开发阶段的一些管理方法是什么&#xff1f; 答&#xff1a;从Spec到实现&#xff1a;把修改集集成到代码库中、开发人员的标准工作流程、代码完成。 开发阶段的日常管理&#xff1a;闭门造车、每日构建&#xff08;每天…

[转]老婆的日记 爆笑(看了你就想结婚了)

半夜&#xff0c;醒来&#xff0c;感觉老公紧抱着我&#xff0c;窃喜&#xff01;心想&#xff1a;这家伙平时挺酷的&#xff0c;没想到睡觉时一不小心就露馅了。于是感动不已&#xff0c;正准备好好享受他的拥抱时&#xff0c;听见他迷迷糊糊说到&#xff1a;“老婆&#xff0…

mysql 超时设置

在Mysql的默认设置中&#xff0c;如果一个数据库连接超过8小时没有使用&#xff08;闲置8小时&#xff0c;即28800s&#xff09;&#xff0c;mysql server将主动断开这条连接&#xff0c;后续在该连接上进行的查询操作都将失败&#xff0c;将出现&#xff1a;error 2006 (MySQL…

python将图片生成视频,和空白视频

直接上代码,我这里以一张图片演示。 以这张图片为例,代码如下: import cv2 import os import numpy as npfps = 30 size = (1280, 720) name = 1 videowriter = cv2.VideoWriter("result.mp4",-1, fps, size)for i in range(300):#生成图片视频img = cv2.imread…

BZOJ 3408: [Usaco2009 Oct]Heat Wave 热浪( 最短路 )

普通的最短路...dijkstra水过.. ------------------------------------------------------------------------------#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<queue>#define rep( i , n ) for( int i …

活着的滋味!差距!让人心酸!

本文网址:http://bbs5.news.163.com/board/rep.jsp?btalk&i246484 复制 一排黑锅灶让人心酸   每来一名学生&#xff0c;队员们就赶忙帮他们卸下肩膀上的扁担&#xff0c;帮他们拿被褥和大米。实践队员在食堂外的走廊上看到了一排黑糊糊的碎砖头&#xff0c;如果不是…

杨森翔的书法:书法

转载于:https://www.cnblogs.com/ysx4221/p/4831923.html

重中之重:委托与事件

相关文章链接 编程之基础&#xff1a;数据类型&#xff08;一&#xff09; 编程之基础&#xff1a;数据类型&#xff08;二&#xff09; 高屋建瓴&#xff1a;梳理编程约定 动力之源&#xff1a;代码中的泵 难免的尴尬&#xff1a;代码依赖 可复用代码&#xff1a;组件的来龙去…