LeetCode11. 盛最多水的容器
阿新 • • 發佈:2020-12-07
一、題目描述
☆☆☆二、解法
【最優解】:雙指標(對撞指標),時間複雜度O(n)
class Solution { public int maxArea(int[] height) { /** * 方法1:暴力法,時間複雜度O(n^2) */ /*int res = 0; for (int i = 0; i < height.length - 1; i++) { for (int j = i + 1; j < height.length; j++) { int temp = (j - i) * Math.min(height[i], height[j]); res = Math.max(res, temp); } } return res;*/ /** * 方法2:對撞指標。 時間複雜度 O(n) 空間複雜度 O(1) * 思路:每次移動指標時,儘量保留比較高的邊,讓低邊對應的指標向內移動,以獲得有更高邊的機會。 */ int res = 0; int l = 0, r = height.length - 1; while (l < r) { int temp = (r - l) * Math.min(height[l], height[r]); res = Math.max(res, temp);if (height[l] < height[r]) { l ++; }else { r --; } } return res; } }