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;
    }

}
目录
相关文章
|
21天前
|
算法 Java C语言
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
C++和Java中的随机函数你玩明白了吗?内附LeetCode470.rand7()爆改rand10()巨详细题解,带你打败LeetCode%99选手
|
6天前
|
安全 Java 测试技术
Java并发容器总结(下)
Java并发容器总结(下)
9 0
|
6天前
|
存储 安全 Java
Java并发容器总结(上)
Java并发容器总结(上)
7 0
|
8天前
|
存储 算法 Java
盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?
盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?
26 0
|
15天前
|
存储 安全 Java
Java中的容器,线程安全和线程不安全
Java中的容器,线程安全和线程不安全
16 1
|
16天前
|
存储 Java 开发者
使用Docker容器化Java后台应用
【4月更文挑战第16天】本文介绍了如何使用Docker容器化Java后台应用。Docker作为开源应用容器引擎,提供一致运行环境,简化部署,增强可移植性。文章详细阐述了Docker的优势,包括环境一致性、隔离性、可移植性和资源效率。步骤包括安装Docker、创建Dockerfile、构建镜像、运行容器及管理容器。进阶部分涉及多阶段构建、数据持久化和网络配置,强调了Docker对现代Java开发的重要性。
|
17天前
|
存储 Java C++
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
leetcode 2525 根据规则将箱子分类 c++ pyhton java c题解
14 1
|
20天前
|
安全 算法 Java
安全无忧:Java并发集合容器的应用与实践
安全无忧:Java并发集合容器的应用与实践
28 0
安全无忧:Java并发集合容器的应用与实践
|
23天前
|
存储 安全 算法
java多线程之并发容器集合
java多线程之并发容器集合
|
28天前
|
Java 持续交付 开发者
使用 Docker 容器化 Java Web 应用:提高开发和部署效率
【4月更文挑战第4天】Docker 作为轻量级容器技术,提升了 Java Web 应用的开发和部署效率。它提供类似生产环境的本地开发体验,减少环境配置时间,保证应用隔离性与稳定性。Docker 改善了部署流程,实现跨环境的无缝迁移,支持自动化构建、部署和扩展,并促进持续集成和持续部署,助力企业实现更高效、可靠的软件生命周期管理。