LeetCode刷題筆記 42

2021-09-03 07:35:05 字數 1273 閱讀 6545

題目:接雨水。給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。

上面是由陣列 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度圖,在這種情況下,可以接 6 個單位的雨水(藍色部分表示雨水)。

方法一:暴力法

從左到右遍歷陣列,找到當前元素左側最大值以及右側最大值,取最小減去自身即為當前元素積累的面積(如果自身就是那個最小的最大值則減完為0)

class

solution

for(

int j = i; j < size; j++

) ans += math.

min(max_left, max_right)

- height[i];}

return ans;

}}

時間複雜度: o(n2)。陣列中的每個元素都需要向左向右掃瞄。

空間複雜度: o(1)

方法二:雙指標

解法一:

水坑的深度總是由短邊決定

只要right高度》left高度,積水高度將由left_max決定,當前高度比left_max小,則面積+=left_max-當前高度,否則當前高度賦值為left_max。

積水高度將由left_max決定的原因:

只要right高度》left高度,兩種情況:

(1)上一步操作是–right;那麼left指向值的一定是left_max

(2)上一步操作是++left;那麼right指向值的一定是right_max且比left_max大

不管哪種情況,此時right高度一定大於等於left_max

class

solution

else

}return ans;

}}

解法二:

l_max 和 r_max 代表的是 height[0…left] 和 height[right…end] 的最高柱子高度。

如果l_max < r_max,不管這個 r_max是不是右邊最大的都不重要,重要的是height[left]能夠裝的水只和l_max有關。

class

solution

else

}return ans;

}}

想法最重要,想問題的時候不要被題目中的例子侷限住了。

leetcode刷題之路42 接雨水

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。上面是由陣列 0,1,0,2,1,0,1,3,2,1,2,1 表示的高度圖,在這種情況下,可以接 6 個單位的雨水 藍色部分表示雨水 感謝 marcos 貢獻此圖。示例 輸入 0,1,0,2,1,0,1...

Leetcode刷題筆記

1.兩數之和給定乙個整數陣列nums 和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。ps 你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。思路 用target減去nums中的每乙個數,並設立乙個字典來記錄對應的下標 class...

LeetCode刷題筆記

實現strstr 給定乙個 haystack 字串和乙個 needle 字串,在 haystack 字串中找出 needle 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。示例 1 輸入 haystack hello needle ll 輸出 2 示例 2 輸入 haystack aaaa...