运行结果
执行结果:通过
执行用时 :4 ms, 在所有 java 提交中击败了75.56%的用户
内存消耗 :40 MB, 在所有 java 提交中击败了92.22%的用户
代码与注释
class Solution {
public int maxArea(int[] height) {
int max_area = 0;
int i = 0; // 头指针
int j = height.length-1; // 尾指针
while (i < j)
{
max_area = Math.max(max_area, Math.min(height[i], height[j])*(j-i));
if (height[i] > height[j]) j -= 1;
else i += 1;
}
return max_area;
}
}
做题心得
1.传统思路是采用暴力破解法:计算出所有情况的面积,时间复杂度是O(n^2)。
2.双指针法:双指针指向数组头和尾,针对盛水最少由短板决定的情况,这个时候移动长板只会让盛水变少,所以思路是,每次移动短板,向长板靠近,出现的更大的面积时更新。
3.时间复杂度是O(n),只遍历一次。
4.max_area = Math.max(max_area, Math.min(height[i], height[j])*(j-i));语句可以判断满足条件再赋值,提高了执行效率,但是会牺牲可读性。