【算法筆記】求積水量

今天在群里看到一道面試題,試著擼了一下

image.png
package main

import (
    "fmt"
    "testing"
)



func findEnd(start int, arr []int) int {
    height := arr[start]
    newArr := arr[start+1:]
    max,index:=0,0
    for i, a := range newArr {
        if a >= height {
            return start + i + 1
        }else {
            if a>max {
                max = a
                index = i
            }
        }
    }
    if index!=0{
        return start + index + 1
    }
    return 0
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

func getTotal(start, end int, arr []int) int {
    m := min(arr[start], arr[end])
    total := m * (end - start - 1)
    for i := start + 1; i < end; i++ {
        total -= arr[i]
    }
    return total
}


func trap(height []int) int {
    start, end, result := 0, 0, 0
    for start != len(height) {
        if height[start] < 1 {
            start += 1
            continue
        }
        end = findEnd(start, height)
        if end-start == 1 {
            start += 1
            continue
        }

        if end == 0 {
            start += 1
        } else {
            total := getTotal(start, end, height)
            result += total

            start = end
        }
    }
    return result
}

func TestWater(t *testing.T) {
    //arr := []int{4,2,3}
    arr := []int{5,5,1,7,1,1,5,2,7,6}
    //arr := []int{0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1}
    //arr := []int{1}
    result := trap(arr)
    fmt.Println(result)
}
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容