1. 程式人生 > 實用技巧 >LeetCode11. 盛最多水的容器

LeetCode11. 盛最多水的容器

一、題目描述

☆☆☆二、解法

【最優解】:雙指標(對撞指標),時間複雜度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; } }