LeetCode.M11.盛最多水的容器
生活随笔
收集整理的這篇文章主要介紹了
LeetCode.M11.盛最多水的容器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
LeetCode.M11
題目:
題目大意:
? 如圖所示。
數據范圍:
如圖所示思路:
? 采用雙指針,所容納的水為min(h[l], h[r]) * (r - l) ,初始時l = 0,r = len - 1,接下來選擇該移動哪邊的指針。無論l或r向中間收縮一格,都會導致水槽底邊寬度(r - l)變短:
- 若向內移動短板 ,水槽的短板 min(h[i],h[j]) 可能變大,因此下個水槽的面積可能增大 。
- 若向內移動長板 ,水槽的短板 min(h[i],h[j]) 不變或變小,因此下個水槽的面積一定變小 。
因此我們每次只需要向內移動短板的指針即可。
代碼:
class Solution {public int maxArea(int[] height) {int l = 0, r = height.length - 1, res = 0;while (l < r){int hl = height[l], hr = height[r], t = r - l;if (hl < hr){res = Math.max(res, t * hl);l ++ ;}else {res = Math.max(res, t * hr);r -- ;}}return res;} }public class Main {public static void main(String[] args) {Solution solution = new Solution();int[] nums = new int[]{1,8,6,2,5,4,8,3,7};System.out.println(solution.maxArea(nums));} }時空復雜度分析等:
-
時間復雜度 : O(n)
-
空間復雜度 : O(1)
題目鏈接:
11. 盛最多水的容器 - 力扣(LeetCode)
總結
以上是生活随笔為你收集整理的LeetCode.M11.盛最多水的容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DOS命令整理
- 下一篇: 快速清除字符串边上的空格