首页 > 其他 > 详细

接雨水

时间:2020-04-04 19:20:33      阅读:63      评论:0      收藏:0      [点我收藏+]

题目地址:https://leetcode-cn.com/problems/trapping-rain-water/

题目思路:

1、利用双指针,找到左右两边第一个可以存水的界限(height[i]>height[i+1] height[j]>height[j-1])

2、取左右界限的最小值,上移x轴,获取对应的雨槽数(如图,从1到2)

3、重复1 2直到结束

技术分享图片

 

代码:

技术分享图片
package main

import "fmt"

func main() {
    height := []int{0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1}
    fmt.Println(trap(height))
}

//试题地址:https://leetcode-cn.com/problems/trapping-rain-water/
func trap(height []int) int {
    if len(height) == 0 {
        return 0
    }

    i := 0
    j := len(height) - 1
    sum := 0

    //查找左右界限
    var temp int
    for {
        for m := i; m < len(height)-1; m++ {
            if height[m] > height[m+1] {
                temp = m
                break
            }
            if m == len(height)-1 {
                temp = m
            }
        }
        i = temp

        for m := j; m > 1; m-- {
            if height[m] > height[m-1] {
                temp = m
                break
            }
            if m == 1 {
                temp = m
            }
        }
        j = temp

        //上移x轴
        if height[i] > height[j] {
            sum += list(&height, i, j, height[j])
            j -= 2
        } else if height[i] < height[j] {
            sum += list(&height, i, j, height[i])
            i += 2
        } else if height[i] == height[j] {
            sum += list(&height, i, j, height[i])
            i += 2
            j -= 2
        }
        if i >= j || i == j-1 {
            break
        }
    }
    return sum
}

func value(n, m int) int {
    temp := 0
    if n-m >= 0 {
        temp = n - m
    }
    return temp
}

func list(height *[]int, i, j, k int) int {
    temp := 0
    for m := i; m <= j; m++ {
        temp += value(k, (*height)[m])
        (*height)[m] = value((*height)[m], k)
    }
    return temp
}

func list_print(height []int) {
    for i := 0; i < len(height); i++ {
        fmt.Print(height[i], " ")
    }
    fmt.Println()
}
View Code

 

接雨水

原文:https://www.cnblogs.com/ybf-yyj/p/12632850.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!