leetcode第11题,盛水最多的容器,java实现

15 篇文章 0 订阅

题目链接

运行结果

执行结果:通过
执行用时 :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));语句可以判断满足条件再赋值,提高了执行效率,但是会牺牲可读性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值