盛水最多的容器 ---- 双指针

2024-04-24 22:20
文章标签 指针 容器 盛水

本文主要是介绍盛水最多的容器 ---- 双指针,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接

题目:

分析:

  • 最大容积 即使就是最大面积, 长为下标之差, 宽为两下标对应值的最小值
  • 解法一: 暴力枚举: 将每两个数之间的面积都求出来, 找最大值, 时间复杂度较高
  • 解法二: 
    • 假设我们的数组是[6, 2, 5, 4], 我们先假设最左边和最右边, 即6 和 4 之间是最大面积长a*宽b
    • 此时我们拿较小的那个数也就是4, 继续和中间的数进行比较
      • 如果遇到的是2, 即比4小的数,  那么a在减小, b也在减小, 面积肯定比刚才小, 所以不需要考虑2 和 4 了
      • 如果遇到的是5, 即比4大的数, 此时a减小, 而b是不变的(宽还是4), 所以面积还是比原来小
    • 得出结论: 找到最左边和最右边的数的最小值, 那么拿着这个最小值和中间的任何一个数相比, 都没有原来的面积大, 所以我们要拿着最大值, 继续比较下去, 并比较面积, 记录下最大的面积

思路:

  1. 在左右各定义两个变量 left 和right, 计算此时的面积, 存放在max变量中, 这个变量存放最大面积
  2. 若left指向的是较小的值, 则left++, 并比较此时的面积与max, 如果大于max,则把此时的值给max, 若right指向的是较小的值, 则right-- ,并比较此时的面积与max, 如果大于max,则把此时的值给max
  3.  直到两指针相遇, 遍历完全部元素, max中存放的就是最大面积

代码:

class Solution {public int maxArea(int[] height) {int left = 0;int right = height.length-1;int max = 0;while(left < right){int min = Math.min(height[left],height[right]);int area = (right - left) * min;max = Math.max(max,area);if(min == height[left]){left++;}else{right--;}}return max;}
}

这篇关于盛水最多的容器 ---- 双指针的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/932994

相关文章

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

如何将Tomcat容器替换为Jetty容器

《如何将Tomcat容器替换为Jetty容器》:本文主要介绍如何将Tomcat容器替换为Jetty容器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat容器替换为Jetty容器修改Maven依赖配置文件调整(可选)重新构建和运行总结Tomcat容器替

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

Python容器类型之列表/字典/元组/集合方式

《Python容器类型之列表/字典/元组/集合方式》:本文主要介绍Python容器类型之列表/字典/元组/集合方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 列表(List) - 有序可变序列1.1 基本特性1.2 核心操作1.3 应用场景2. 字典(D

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF