盛最多水的容器(leetcode 11)
一:解题思路
方法一:暴力破解,Space:O(n^2),Space:O(1),这种方法时间复杂度太大,容易引起超时。
方法二:双指针,Time:O(n),Space:O(1)
二:完整代码示例 (C、C++、Java、Python)
方法一C:
int max(int a, int b) { return a > b ? a : b; } int min(int a, int b) { return a < b ? a : b; } int maxArea(int* height, int heightSize) { if (height == NULL || heightSize == 0) return 0; int maxValue = INT_MIN; int i = 0; int j = 0; int cur = 0; for (i = 0; i < heightSize; i++) { for (j = i+1; j < heightSize; j++) { cur = (j - i)*min(height[i],height[j]); maxValue = max(maxValue,cur); } } return maxValue; }
方法一C++:
class Solution { public: int maxArea(vector<int>& height) { if (height.size() == 0) return 0; int maxValue = INT_MIN; for (int i = 0; i < height.size(); i++) { for (int j = i + 1; j < height.size(); j++) { int cur = (j - i)*min(height[i],height[j]); maxValue = max(maxValue,cur); } } return maxValue; } };
方法一Java:
方法一Python:
import sys from typing import List class Solution: def maxArea(self, height: List[int]) -> int: if not height: return 0 maxValue=-sys.maxsize-1 n=len(height) for i in range(0,n): for j in range(i,n): cur=(j-i)*min(height[i],height[j]) maxValue=max(maxValue,cur) return maxValue
方法二C:
int max(int a, int b) { return a > b ? a : b; } int min(int a, int b) { return a < b ? a : b; } int maxArea(int* height, int heightSize) { if (height == NULL || heightSize == 0) return 0; int i = 0; int j = heightSize - 1; int maxValue = INT_MIN; while (i < j) { int cur = (j - i)*min(height[i],height[j]); maxValue = max(maxValue,cur); if (height[i] < height[j]) i++; else j--; } return maxValue; }
方法二C++:
class Solution { public: int maxArea(vector<int>& height) { if (height.size() == 0) return 0; int maxValue = INT_MIN; int i = 0; int j = height.size() - 1; while (i < j) { int cur = min(height[i], height[j])*(j-i); maxValue = max(maxValue,cur); if (height[i] < height[j]) i++; else j--; } return maxValue; } };
方法二java:
方法二Python:
import sys from typing import List class Solution: def maxArea(self, height: List[int]) -> int: if not height: return 0 maxValue=-sys.maxsize-1 i=0 n=len(height) j=n-1 while i<j: cur=(j-i)*min(height[i],height[j]) maxValue=max(maxValue,cur) if height[i]<height[j]: i=i+1 else: j=j-1 return maxValue

浙公网安备 33010602011771号