双指针 01

99 阅读1分钟

LeetCode 11.盛最多水的容器

LeetCode 11 题目链接

/*
 * 本题用到双指针,一头一尾,相向移动
 * 找到两指针指向的“矮墙”,然后以矮墙的高度 乘 指针相隔的距离 即为面积
 * 移动指针时,只需要考虑移动“矮墙”,“高墙”可以继续作为高墙来使用
 * 
 * 时间复杂度:O(n)
 * Code by java
 */
class Solution {

	public int maxArea(int[] height) {
		int ans = 0;
		int len = height.length;
		if (len < 2)
			return 0;
		int left = 0, right = len - 1;

		while (left < right) {
			int minHeight = Math.min(height[left], height[right]);
			ans = Math.max(ans, minHeight * (right - left));

			if (minHeight == height[left]) { // 让高的一侧继续作为“高墙” 更换目标只需要动“矮墙”
				left++;
			} else {
				right--;
			}
		}
		return ans;
	}
	public static void main(String[] args) {
		int[] height = { 1, 8, 6, 2, 5, 4, 8, 3, 7 };
		Solution sol = new Solution();
		int ans = sol.maxArea(height);
		System.out.println(ans);
	}
}