LeetCode 11— 盛最多水的容器

给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (iai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (iai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且 n 的值至少为 2。

java解题思路:(贪心算法/贪婪算法,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。)

首先假设最优解是start=0,end=height.length--,即长度最长的部分。这个时候,如果要向内遍历,即长度变短,只能增加容器的宽度,即高度y。所以,如果start的长度大于end的长度,保持start不变,end--,得到的结果与上一结果比较。(即只考虑局部最优解)

	public static int maxArea(int[] height) {
		int max_area = 0;
		int temp = 0;
		int max_height = 0;
		int start = 0, end = height.length - 1;// 定义两个指针

		while (start < end) {
			temp = (end - start) * Math.min(height[end], height[start]);
			max_area = max_area > temp ? max_area : temp;
			if (height[start] > height[end]) {
				end--;
			} else {
				start++;
			}

		}
		return max_area;
	}

                     

你可能感兴趣的:(LeetCode 11— 盛最多水的容器)