LeetCode刷题 42. 接雨水

一、题目

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

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

LeetCode刷题 42. 接雨水_第1张图片

示例:

输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

二、第一次成功提交(C)

int minn(int a,int b)
{
    if(a>b)
        return b;
    else
        return a;
}

int rongJi(int *height, int begin, int end)
{
    int hig = minn(height[begin],height[end]);
    int total = 0;
    for(int i = begin+1; i

本次提交总结:

           1.一直提交不通过的原因是未考虑边界值,在以后的刷题中一定要判断输入为空等边界值的情况。

           2.具体流程如下,写的不是很清晰,以后再改

LeetCode刷题 42. 接雨水_第2张图片

         3.结果如下图所示:

LeetCode刷题 42. 接雨水_第3张图片

三、别人的优质代码分析总结

1.先上代码

int* QuickSort(int* nums, int *seq, int start, int end);
int trap(int* height, int heightSize) {
    int *sortheight = (int*)malloc(sizeof(int) * heightSize);
    int *seq = (int*)malloc(sizeof(int) * heightSize);
    for(int i = 0; i < heightSize; i++)
    {
        seq[i] = i;
        sortheight[i] = height[i];
    }      
    QuickSort(sortheight, seq, 0, heightSize - 1);
    int left = seq[heightSize - 1], right = left, result = 0;
    for(int i = heightSize - 1; i >= 0; i--)
    {
        //计算seq[i] 与left或right之间的坑,在中间的话不管
        if(seq[i] < left)
        {
            for(int j = seq[i] + 1; j  right)
        {
             for(int j = right + 1; j =end)return;
    int i = start, j = end, temp = nums[start], tempseq = seq[start];
    while(i=temp && i

 

你可能感兴趣的:(LeetCode刷题)