LeetCode之11.盛最多的水

方法一

使用暴力解法,直接用两个for循环来实现遍历。这样的话,就是将所有的面积情况都给记录下来,通过比较可以找到最大值。这样我们就找到了所需要的结果。
废话不多说,直接上代码

		int maxArea = 0;
		int max = 0;
//		暴力算法
		for (int i = 0; i < list.length-1; i++) {
			
			for (int j = i+1; j < list.length; j++) {
				max = Math.max(max, Math.min(list[i], list[j]) * (j-i));
			}
			maxArea = max;
		}
		System.out.println(maxArea);

这个方法因为用到的时间复杂度过大,超时了。
虽然超时了,但是是我第一次想到的方法,对于学渣来说,看到题目,能直接想到解法思路已经很不错了。

方法二

使用的是双指针的解法,对于数组来说,就是定义左右指针,分别指向数组的左右两边,使用while循环,得到一个面积,然后通过比较height[L]和height[R]的大小,那个值较小,他的指针向前向后移动(左指针向前,右指针向后),再次获取面积,与第一次比较,谁的值较大保存在maxArea中,然后输出即可。

		int maxArea = 0;
		//左右指针
		int L=0,R = list.length-1;
		System.out.println(L+"***"+R);
		//定义两个指针 分别在数组的左右两边,比较两个值的大小,谁较小,谁的指针向前移动
		//再次求出所围成的面积,与maxArea比较大小,大的留下
		while(L<R){
			int max = Math.min(list[L], list[R]) * (R - L);
			maxArea = Math.max(maxArea, max);
			if (list[L]<=list[L+1]) {
				L++;
			}else{
				R--;
			}
		}
		System.out.println(maxArea);

这个方法的性能也不是很好,但是可以提交成功,这道题我只能用这种方法暂时提交上,后续有好的解法在补充。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值