Java每日一题 ~ 盛最多水的容器

ops/2024/10/18 22:37:06/

. - 力扣(LeetCode)

1.题目解析

 本题的要求就是:给定数组索引之间的差值为宽,元素值中小的为边长求面积。

2.算法分析

思路一:暴力枚举

暴力法的思路是对所有可能的容器组合进行穷举,计算它们能容纳的水量,并找出最大的水量。具体步骤如下:

  1. 使用两层嵌套循环遍历所有可能的组合 (i, j),其中 i 和 j 分别表示容器的两边界的索引。
  2. 对于每一对 (i, j),计算容器的高度为 min(height[i], height[j]),宽度为 j - i,水量即为高度乘以宽度。
  3. 维护一个变量 maxArea 来记录找到的最大水量。

暴力法的时间复杂度为 O(n^2),空间复杂度为 O(1)

java">class Solution {public int maxArea(int[] height) {int maxArea = 0;int n = height.length;for (int i = 0; i < n - 1; i++) {for (int j = i + 1; j < n; j++) {int currentArea = Math.min(height[i], height[j]) * (j - i);maxArea = Math.max(maxArea, currentArea);}}return maxArea;}
}

思路二:双指针(有点小贪心)

对于解法一:枚举了许多没有必要的操作,我们可以按照边最大来找最大的高来找呢?当边确定为左右节点,我们往里面寻找的时候,宽肯定减小,那么我们肯定不能让高也减小吧,高减小会比刚刚的面积大吗?所以我们需要移动短边来使高变大,因为高是又短边决定的,移动高边短边还是一样,找到高的还是高还是不变但宽减小了,找到低的高也减小了。

因此我们的思路就是:贪心让宽最大,然后往里面找,每次都让高有可能变大,然后和面积比较找出最大值,记住移动短边才能让高变大。

双指针法是一种优化的方法,通过从容器的宽度最大开始逐渐减小的方式,来求解问题。具体步骤如下:

  1. 使用两个指针 left 和 right 分别指向数组的开头和结尾。
  2. 计算当前容器的水量,即 min(height[left], height[right]) * (right - left),并更新最大水量。
  3. 移动高度较小的指针向内移动,因为容器的高度由较小的那个决定,如果移动高度较大的指针,宽度减小,水量只会更少或者不变。

双指针法的时间复杂度为 O(n),空间复杂度为 O(1)

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


http://www.ppmy.cn/ops/86381.html

相关文章

web网站组成

web网站由四部分组成&#xff1a;浏览器 前端服务器 后端服务器 数据库服务器 流程&#xff1a; 1.浏览器输入网站后&#xff0c;向前端服务器发送请求&#xff0c;前端服务器响应&#xff0c;静态的数据给浏览器。 2.前端代码中script中有url,这个是向后台发送请求的网…

SQL注入

目录 引言 一.SQL注入的产生机制 1. 输入验证的缺失 2. 数据库查询的拼接 3. 应用程序架构不当 二.如何防止SQL注入 1. 使用参数化查询&#xff08;Prepared Statements&#xff09; 2. 输入验证与清理 3. 最小权限原则 4. 定期安全审计与监控 引言 随着信息技术的迅…

C# 代理模式

栏目总目录 概念 代理模式是一种结构型设计模式&#xff0c;它为其他对象提供一种代理以控制对这个对象的访问。在代理模式中&#xff0c;我们创建一个具有现有对象&#xff08;称为“真实对象”或“被代理对象”&#xff09;相同功能的代理对象。代理对象可以在客户端和目标对…

JAVAWeb实战(后端篇)

因为前后端代码内容过多&#xff0c;这篇只写后端的代码&#xff0c;前端的在另一篇写 项目实战一&#xff1a; 1.创建数据库,表等数据 创建数据库 create database schedule_system 创建表&#xff0c;并添加内容 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------…

day 02

作业&#xff1a; 1> 写一个日志文件&#xff0c;将程序启动后&#xff0c;每一秒的时间写入到文件中 1、2024- 7-29 10:31:19 2、2024- 7-29 10:31:20 3、2024- 7-29 10:31:21 ctrlc:停止程序 ./a.out 4、2024- 7-29 10:35:06 5、2024- 7-29 10:35:07 6、2024- 7-29 10:3…

python每日学习13:pandas库的用法(2)

python每日学习13&#xff1a;pandas库的用法&#xff08;2&#xff09; 建立索引:所有的数据框默认都已经使用从 0 开始的自然数索引&#xff0c;因此这里的"建立”索引指的是自定义索引 import pandas as pd import numpy as np df pd.DataFrame( {varl : 1.0, var2 :…

信号的运算

信号实现运算&#xff0c;首先要明确&#xff0c;电路此时为负反馈电路&#xff0c;当处于深度负反馈时&#xff0c;可直接使用虚短虚断。负反馈相关内容可见&#xff1a;放大电路中的反馈_基极反馈-CSDN博客https://blog.csdn.net/qq_63796876/article/details/140438759 一、…

2024.7.23(DNS正向解析)

回顾&#xff1a; # 安装 samba yum -y install samba # 自建库&#xff0c;只下载&#xff0c;不安装 yum -y install --downloadonly --downloaddir./soft/ # 配置samba vim /etc/samba/smb.conf # 配置 [xxxxxxxname] commentdasdffsffdslfdjsa path/share …