首页 > 其他分享 >42. 接雨水C

42. 接雨水C

时间:2024-02-23 16:00:11浏览次数:18  
标签:return int sum 42 雨水 tail 两头

因为还是双指针的题目。

我想到的短板效应,看两头,能接住的水也就是取决于最短的一方。

每次看两头后,在里面找比最短还短的地方,那个就是有水的地方。找到水后在把它填平,防止重复找到。然后两头往中间靠就行了。

int min(int i,int j){
        if(i>j) return j;
        return i;
    }

int findsum(int* height,int head,int tail,int t){
    if(t==0) return 0;
    int sum=0;
    for(;head<=tail;head++){
        if(height[head]<t){
            sum+=t-height[head];
            height[head]=t;
        }
    }
    return sum;
}

int trap(int* height, int heightSize) {
    int head=0,tail=heightSize-1;
    while(height[head]==0 && head<tail) head++;
    while(height[tail]==0 && tail>head) tail--;
    int sum=0;
    while(head <tail){
        int t=min(height[head],height[tail]);
        sum+=findsum(height,head+1,tail-1,t);
        if(height[head]==height[tail]){
            head++;
            tail--;
            while(head<tail && height[head]<=height[head-1]) head++;
            while(head<tail && height[tail]<=height[tail+1]) tail--;
        }else if(height[head] <height[tail]){
            head++;
             while(head<tail && height[head]<=height[head-1]) head++;
        }else{
            tail--;
            while(head<tail && height[tail]<=height[tail+1]) tail--;
        }
    }
    return sum;
}

结果:懒得优化了。等考上研究生了。在提高要求把。目前还是把题目能解出来的阶段。

标签:return,int,sum,42,雨水,tail,两头
From: https://www.cnblogs.com/llllmz/p/18029769

相关文章

  • 中百 NETAPP DS4243 存储故障盘换盘
    netapp存储出现一个故障盘,现更换故障盘。图片是已更换后正常亮灯(实际故障盘是12)首先查看多控制器的磁盘状态A控磁盘状态B控磁盘状态等磁盘确定是FAILED后即可进行换盘拔出对应的故障盘更换新的新盘(更换时建议间隔半分钟)新盘更换后,在通过diskshow-v查看磁盘属于NotOwned,还未被使......
  • Go 100 mistakes - #42: Not knowing which type of receiver to use
          ......
  • windows server 2019/2022安装WSUS更新服务器配置System.Runtime.InteropServices.COM
    现象: 2024-02-1814:41:10Postinstallstarted2024-02-1814:41:10Detectedroleservices:Api,UI,WidDatabase,Services2024-02-1814:41:10Start:LoadSettingsFromXml2024-02-1814:41:10Start:GetConfigValuewithfilename=UpdateServices-Services.xmlit......
  • P1429&&P7883 平面最近点对(加强版 && 加强加强版)
    这是一道非常经典的题目。首先可以想到暴力的算法,一一匹配取最小值,期望时间复杂度为$O(n^2)$,很明显过不了此题。所以我们考虑分治,我们每次将所有点按x分为两半,然后分治两半,取最小值,然后就可以获取到左右两块内部最小值,那么大范围内的最小值只有左边最小值,右边最小值或者横跨......
  • P2042 [NOI2005] 维护数列 题解
    题目链接:维护数列比较不好码的题,首先确保自己会一种文艺平衡树的书写,这点因人而异,比较推荐初学者学\(fhq\)平衡树,坑比较少,比较好码,写平衡树合并、持久化类的题时,也比较好写。注意到空间需求比较大,还涉及删除,我们的删除用各种树类数据结构中最常用的回收标记用于新的节点开辟。......
  • T426132 三位数
    本题和[NOIP1998普及组]三连击差不多嘛,从100开始遍历到999就行了。题中给的3个条件,按照这种思路,第一个条件完全不用去判断;剩下的很好写,把三位数的个、十、百位分别拆出来存进变量即可。具体细节见于代码:#include<bits/stdc++.h>usingnamespacestd;intk,s;intmain(){......
  • T426130 酒
    本题题意说白了,给你\(a\)、\(b\)、\(c\)、\(d\)、\(e\)、\(x\)、\(y\),让你算出3个李白分别的酒量,算法由题知。最后,它让你输出这3个数中最大值的初始编号及其具体的值。代码如下:#include<bits/stdc++.h>usingnamespacestd;doublea,b,c,d,e,x,y;structp{ double......
  • T426131 分配工资
    本题题意说白了就是,给你\(n\)个题,和出这次公开赛的工资\(m\),每个题都给出它的出题人和权重,问你编号为1的出题人能拿多少工资。本题中,工资要:按比分配!按比分配!!按比分配!!!所以代码如下:#include<bits/stdc++.h>usingnamespacestd;intn,x;doublem,a,b,y;intmain(){ c......
  • 42种常见网站漏洞
    42种常见网站漏洞,让你水得快速,水得专业转载:零漏安全2024-01-1012:29发表于河南免责声明:由于传播、利用本公众号"零漏安全"所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号"零漏安全"及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权......
  • P4231 三步必杀
    原题链接题解本题用形象一点的话来说就是对某个区间内所有的值进行修改,并且修改与查询的关系是多次修改加最后一次查询由于区间内修改的值的斜率一定所以我们可以这样设\(k[i]\)的含义是点\(i\)比点\(i-1\)多了多少对\(k[i]\)进行加减操作的含义是代表点\(i\)......