LeetCode题解-盛水最多的容器-Java

简介: 盛水最多的容器-Java

每每看及官方解法,总羞愧难当,官方解法简洁易懂,何时才能达到这种水平呢?只有不断努力了。

package leetCode;
//官方解法
class Solution {
   
  public int maxArea(int[] height) {
   
      int maxarea = 0, l = 0, r = height.length - 1;
      while (l < r) {
   
          maxarea = Math.max(maxarea, Math.min(height[l], height[r]) * (r - l));
          if (height[l] < height[r])
              l++;
          else
              r--;
      }
      return maxarea;
  }
}



//我的思路:每次比较单侧,利用偏移量来比较,和官方解法对比后,感觉我的思路就是暴力法
public class BestWaterContainer {
   

    public static void main(String[] args) {
   
        //int[] heights= {10,9,8,7,6,5,4,3,2,1};//25
        //int[] heights= {1,8,6,2,5,4,8,3,7};//49
        //int[] heights= {1,1};
        //int[] heights= {1,2,1};
        int[] heights= {
   2,3,10,5,7,8,9};//36
        System.out.println(maxArea(heights));
    }

    public static int maxArea(int[] heights) {
   
        //初始化最大值
        int max = getAcreage(0, heights.length-1, heights);
        System.out.println("初始化的Max:"+ max);
        int i = 0;
        int j = heights.length - 1;
        int offsetLeft = 1;
        int offsetRight = 1;
        while ((i+offsetLeft)<=(j+offsetRight)&&(i+offsetLeft)<heights.length||(j-offsetRight)>= 0) {
   
            // 首先是0和lenght-1,然后让其分别与单侧相邻点比较,取大者,计算值,若值更大者留下
            if ((i+offsetLeft)<heights.length&&heights[i]< heights[i + offsetLeft]) {
   
                int area = getAcreage(i + offsetLeft, j, heights);
                if (area > max) {
   
                    max = area;
                    i = i + offsetLeft;
                }
                //System.out.println("循环中的max:i :"+max);
            }
            if ((j-offsetRight)>= 0&&heights[j] < heights[j - offsetRight]) {
   
                int area = getAcreage(i, j-offsetRight, heights);
                if (area > max) {
   
                    max = area;
                    j = j - offsetRight;
                }
                //System.out.println("循环中的max:j :"+max);
            }
            offsetLeft++;
            offsetRight++;
        }
        return max;

    }

    public static int getAcreage(int startPoint, int endPoint, int heights[]) {
   
        int height = Math.min(heights[startPoint], heights[endPoint]);
        int wide = endPoint - startPoint;
        return wide * height;
    }

}
目录
相关文章
|
1月前
|
存储 容器
LeetCode刷题---11. 盛最多水的容器(双指针-对撞指针)
LeetCode刷题---11. 盛最多水的容器(双指针-对撞指针)
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
23 1
|
3天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
22 0
|
1月前
|
算法 Java
[Java·算法·中等] LeetCode15. 三数之和
[Java·算法·中等] LeetCode15. 三数之和
29 0
|
30天前
|
Java 容器
Java常用组件、容器与布局
Java常用组件、容器与布局
13 0
|
1月前
|
安全 Java API
Java并发 - J.U.C并发容器类 list、set、queue
Queue API 阻塞是通过 condition 来实现的,可参考 Java 并发 - Lock 接口 ArrayBlockingQueue 阻塞 LinkedBlockingQueue 阻塞 ArrayQueue 非阻塞 LinkedQueue 非阻塞
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
[Java·算法·简单] LeetCode 28. 找出字符串中第一个匹配项的下标 详细解读
18 0
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
[Java·算法·简单] LeetCode 14. 最长公共前缀 详细解读
19 0
|
1月前
|
算法 Java 索引
[Java·算法·简单] LeetCode 141. 环形链表 详细解读
[Java·算法·简单] LeetCode 141. 环形链表 详细解读
23 0