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

}
目录
相关文章
|
5月前
|
Kubernetes Cloud Native Java
云原生之旅:从容器到微服务的演进之路Java 内存管理:垃圾收集器与性能调优
【8月更文挑战第30天】在数字化时代的浪潮中,企业如何乘风破浪?云原生技术提供了一个强有力的桨。本文将带你从容器技术的基石出发,探索微服务架构的奥秘,最终实现在云端自由翱翔的梦想。我们将一起见证代码如何转化为业务的翅膀,让你的应用在云海中高飞。
|
5月前
|
Java Linux Maven
java依赖冲突解决问题之容器加载依赖jar包如何解决
java依赖冲突解决问题之容器加载依赖jar包如何解决
|
2月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
3月前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
78 4
|
3月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
99 3
|
3月前
|
容器
Leetcode第十一题(盛最多水的容器)
LeetCode第十一题要求找出两条线,使得它们与x轴构成的容器能盛最多的水,通常使用双指针法来解决,通过移动较短的一边来尝试增加容量。
20 0
Leetcode第十一题(盛最多水的容器)
|
3月前
|
算法 Java
LeetCode(一)Java
LeetCode(一)Java
|
5月前
|
安全 算法 Java
【Java集合类面试二】、 Java中的容器,线程安全和线程不安全的分别有哪些?
这篇文章讨论了Java集合类的线程安全性,列举了线程不安全的集合类(如HashSet、ArrayList、HashMap)和线程安全的集合类(如Vector、Hashtable),同时介绍了Java 5之后提供的java.util.concurrent包中的高效并发集合类,如ConcurrentHashMap和CopyOnWriteArrayList。
【Java集合类面试二】、 Java中的容器,线程安全和线程不安全的分别有哪些?
|
5月前
|
Java 测试技术 数据库
容器镜像解析问题之解析 Java 应用依赖时识别 jar 包如何解决
容器镜像解析问题之解析 Java 应用依赖时识别 jar 包如何解决
40 0