leetcode力扣刷题系列——【三角形的最大高度】
题目
给你两个整数 red 和 blue,分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形,满足第 1 行有 1 个球,第 2 行有 2 个球,第 3 行有 3 个球,依此类推。
每一行的球必须是 相同 颜色,且相邻行的颜色必须 不同。
返回可以实现的三角形的 最大 高度。
示例 1:
输入:
red = 2, blue = 4
输出:
3
示例 2:
输入:
red = 2, blue = 1
输出:
2
示例 3:
输入:
red = 1, blue = 1
输出:
1
示例 4:
输入:
red = 10, blue = 1
输出:
2
提示:
1 <= red, blue <= 100
答案
我的方法
我的方法思路非常简单,我们既然要让他拼成一个三角形,且是每一行的颜色都不一样,那么第一行要么蓝色要么红色,只要确定了第一行的颜色,后面的就都确定了,我分别让红色、蓝色作为第一行,各自求出一个高度,然后我们在将两个高度进行比较后输出,就能得到最好的结果。
这个方法的时间复杂度为O(n)
class Solution:def maxHeightOfTriangle(self, red: int, blue: int) -> int:high1=0high2=0red1=redblue1=bluefor i in range(red1+blue1):if i%2==0:#红先放置red1=red1-1-iif red1>=0 and blue1>=0:high1+=1else:blue1=blue1-i-1if blue1>=0 and red1>=0:high1+=1for i in range(red+blue):if i%2==0:#蓝先放置blue=blue-i-1if blue>=0 and red>=0:high2+=1else:red=red-1-iif red>=0 and blue>=0:high2+=1if high1>=high2:return high1else:return high2
官方的方法一 —— 枚举高度
官方的方法一跟我的方法很像,虽然我也不知道自己用的是枚举法,但是官方说是那我就是。
思路与算法
我们可以递增地枚举三角形的高度,在第 i 行时,如果对应的颜色的剩余球数大于等于 i 个,那么就可以组成第 i 行,否则不能,三角形的最大高度为 i−1。
三角形的颜色布局有两种可能:即红蓝交替(第一行为红色)或者蓝红交替(第一行为蓝色),我们分别枚举这两种情况,并取二者高度的较大值即可。
class Solution:def maxHeightOfTriangle(self, red: int, blue: int) -> int:def maxHeight(x: int, y: int) -> int:i = 1while True:if i % 2 == 1:x -= iif x < 0:return i - 1else:y -= iif y < 0:return i - 1i += 1return max(maxHeight(red, blue), maxHeight(blue, red))
官方的方法二 —— 直接计算出高度
思路与算法
我们也可以使用等差数列公式直接计算出高度。
对于从第一行开始的情况,球的个数依次为 1,3,5,⋯,2k−1,其中 2k−1 是最后一行,那么总计个数为:
1+3+5+⋯+(2k−1)=[(1+(2k−1))×k]/2 =k^2
那么 k 的最大值即为 ⌊no⌋,其中no是提供给奇数行的球的数量,⌊⋅⌋ 表示向下取整。
同理,对于从第二行开始的情况,有:
2+4+6+⋯+2k=[(2+2k)×k]/2 =k^2+k
解方程可得 k 的最大值为 ⌊ [−1+ (1+4ne)^(1/2)]/2⌋,其中ne是提供给偶数行的球的数量。
因此最后一个奇数行为 2⌊no⌋−1,最后一个偶数行为 2⌊ [−1+ (1+4ne)^(1/2)]/2⌋,最终的答案即为其中的较小值加 1。
def maxHeight(x: int, y: int) -> int:odd = 2 * int(sqrt(x)) - 1even = 2 * int((-1 + sqrt(1 + 4 * y)) / 2)return min(odd, even) + 1return max(maxHeight(red, blue), maxHeight(blue, red))
作者:力扣官方题解
链接在这里
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章:

leetcode力扣刷题系列——【三角形的最大高度】
题目 给你两个整数 red 和 blue,分别表示红色球和蓝色球的数量。你需要使用这些球来组成一个三角形,满足第 1 行有 1 个球,第 2 行有 2 个球,第 3 行有 3 个球,依此类推。 每一行的球必须是 相同 颜色,且相…...

工业相机解决方案
工业相机是一种特殊类型的相机,适用于恶劣条件(如高温、高压和振动)下的工作,在控制生产周期、跟踪输送机上的单元、检测超小零件等方面发挥着重要作用。针对工业相机的解决方案,朗观视觉小编认为,可以从以…...

设计一个高效的日志分析系统:自动检测错误日志的实用指南
设计一个高效的日志分析系统:自动检测错误日志的实用指南 在现代软件开发和运维中,日志分析是确保系统稳定性和性能的重要环节。通过对日志的分析,开发者和运维人员可以快速定位问题、优化性能并提高用户体验。本文将介绍如何设计一个日志分析系统,重点关注错误日志的自动…...

英语学习--如果你的父母不听你的话
所有的 Eng中文Eng中文children小孩儿们opposite…在…对面maths数学to take带走;接受;乘坐a way方法,道brave勇敢的few很少more很多more更多able能够when什么时候;…的时候to own拥有a child孩子later一会儿to feel感觉to find找…...

LeetCode:3258.统计满足k约束的子串数量 I(滑动窗口 Java)
目录 3258.统计满足k约束的子串数量 I 题目描述: 实现代码与解析: 滑动窗口 原理思路: 3258.统计满足k约束的子串数量 I 题目描述: 给你一个 二进制 字符串 s 和一个整数 k。 如果一个 二进制字符串 满足以下任一条件&#…...

如果用Java设计MySQL中表级锁、行级锁和间歇锁会是怎么的?
在 MySQL 中,锁机制是确保数据一致性和并发控制的重要手段。MySQL 支持多种锁类型,包括表级锁、行级锁等,每种锁的适用场景、影响范围和实现机制各不相同。我们将逐一介绍它们,并通过模拟代码展示不同锁的实现。 1. 锁类型及其影…...

GIT batch的支持中文的方法和系统建议
GIT batch是window下原生的GIT命令行终端,兼顾了GIT的命令特性,同时也支持很多UNIX的原生的bash交互方法。但是由于编码问题,在使用GIT bach的时候,用户可能会遇到中文支持的问题。这里简单介绍一下GIT batch在Windows系统下如何有…...

骑砍霸主MOD天芒传奇Ⅱ·前传-序章
基于少年包青天第一到三部的闯关夺宝MOD,故事发生在北宋仁宗年间,玩家需要代替包拯寻找天芒,最终完成统一大业.开局可尝试使用暴雨梨花针神器. MOD下载地址: 【免费】PLReminiscence资源-CSDN文库https://download.csdn.net/download/qq_35829452/89851155效果演示: 骑砍2霸…...

神经网络量化基础
1,模型量化概述 1.1,模型量化优点1.2,模型量化的方案 1.2.1,PTQ 理解 1.3,量化的分类 1.3.1,线性量化概述 2,量化算术 2.1,定点和浮点2.2,量化浮点2.2,量化算…...

飞机大战告尾
参考 PPO算法逐行代码详解 链接 通过网盘分享的文件:PlaneWar 链接: https://pan.baidu.com/s/1cbLKTcBxL6Aem3WkyDtPzg?pwd1234 提取码: 1234 10.17关于博客发了又改这件事 悲催的事 今天训练了一早上ppo模型,满怀期待的检测成果时发现一点长进都…...

支持向量机SVM原理详解
SVM原理详解 1、超平面2、SVM原理1. 问题定义2. 分类决策得到约束条件 3. 最大化间隔4. 优化目标 3、凸优化问题1. 原始优化问题优化目标约束条件 2. 拉格朗日乘子法3. 拉格朗日函数分析4. 求解对 w w w 和 b b b 的极值5. 构造对偶问题对偶问题的约束条件: 6、通…...

使用JMeter进行Spring Boot接口的压力测试
使用 Apache JMeter 对接口进行压力测试是一个相对简单的过程。以下是详细的步骤,包括安装、配置和执行测试计划。 1. 下载和安装 JMeter 下载 JMeter 从 JMeter 官方网站https://jmeter.apache.org/download_jmeter.cgi 下载最新版本的 JMeter。 解压缩 将下载的 …...

C++学习笔记----9、发现继承的技巧(三)---- 尊重父类(1)
当写继承类的时候,需要清楚父类与子类之间的交互。像生成顺序,构造函数链,以及转化都可以是问题的根源。 1、父类构造函数 对象不会马上就能干活;它们必须由父类以及所包含的任意对象进行构建。c定义了如下的生成顺序:…...

启动service报错ORA-44317: database open read-only
ADG(RAC)备库环境,srvctl添加service服务成功,启动service时报错ORA-44317: database open read-only。 这是预期行为, 使用“srvctl add service -d <db_name> -s <service_name>”创建服务时,…...

GNU/Linux - Savannah项目
* 我们托管在自由操作系统上运行的自由项目,不依赖任何专有软件。 * 我们的服务使用 100% 的自由软件运行,包括服务本身。 * We host free projects that run on free operating systems and without any proprietary software dependencies. * Our se…...

Debug-028-el-carousel走马灯-当展示图片为2的问题处理
前言: el-carousel走马灯又是给elementui填坑的一天。el-carousel走马灯其实类似小程序中的轮播图。这里担心涉及版权问题就不贴项目中的图了。简单阐述一下问题:正常使用el-carousel时,如果图片数量大于等于3时,可以定时自动顺序…...

TapData 知识库 | 一文吃透数据整合(Data Consolidation)
顾名思义,数据整合指的是将不同来源的数据汇集在一起,并将其集中存储于一个统一的数据平台。数据整合使用户能够通过单一访问入口获取数据,进而推动数据洞察的生成与分析。 数据通常被简单地看作信息的集合,仿佛默认每个数据单元在…...

MySQL数据的导出
【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

微服务--OpenFeign【重点】
如果哪天 我们硬编码写的接口变了,只要写过该接口的 都要改,太麻烦了, 所以 就用 OpenFeign 来解决这个麻烦 了解: SimpleClientHttpRequestFactory和 HttpComponentsClientHttpRequestFactory 都是Spring框架中用于创建ClientH…...

【力扣打卡系列】滑动窗口与双指针(两数之和)
坚持按题型打卡&刷&梳理力扣算法题系列,语言为go,Day1 两数之和 题目描述 解题思路 采用哈希表 将nums[i] nums[j] target 转化成 nums[i] target - nums[j]去思考新建一个map来存储,键为值(左边的)&#…...

蚂蚁华东师范大学:从零开始学习定义和解决一般优化问题LLMOPT
🎯 推荐指数:🌟🌟🌟 📖 title:LLMOPT: Learning to Define and Solve General Optimization Problems from Scratch 🔥 code:https://github.com/caigaojiang/LLMOPT &am…...

价格游戏的终章:品牌如何在通货膨胀时代智取市场
来源:The era of price-led profit growth is coming to an end (marketingweek.com) 近年来,通货膨胀促使许多品牌通过提价来提升利润,而销量几乎没有受到太大影响。然而,随着通货膨胀放缓,继续提价的策略可能会吸引…...

CVTE Android面试题及参考答案
Activity 的生命周期 Activity 的生命周期分为以下几个主要状态: onCreate ():在 Activity 第一次被创建的时候调用。通常在这个方法中进行一些初始化操作,如设置布局、初始化成员变量等。这是 Activity 进入可见状态的第一步。onStart ():当 Activity 即将对用户可见的时候…...

Docker实战:从入门到进阶
Docker实战:从入门到进阶 引言 Docker是一个开源的应用容器引擎,它允许开发者打包他们的应用以及应用的依赖包到一个可移植的容器中,然后发布到任何支持Docker的平台上。本文将通过实战和应用举例,带领大家深入了解Docker的强大…...

Jupyter Notebook汉化(中文版)
原版jupyter notebook是英文的,想要将其改为中文 在jupyter notebook所在环境输入以下命令 pip install jupyterlab-language-pack-zh-CN打开jupyter notebook,在设置语言中将其设置为中文...

C#的小数位保留以及四舍五入
C#使用Math.Round("数值","保留位","保留方式")进行小数位保留以及四舍五入 //1.MidpointRounding.ToEven(四舍六入五成双) //当保留小数位后一位为0~4时,舍去末位 var x1 Math.Round(1.124, 2, MidpointRo…...

KNNImputer
KNNImputer实例是指在使用Python的scikit-learn库时,通过sklearn.impute.KNNImputer类创建的一个对象,该对象专门用于处理数据集中的缺失值。KNNImputer采用K-近邻(K-Nearest Neighbors,KNN)算法来估算并填充这些缺失值…...

RHCE例行性工作笔记
1、单一执行的例行性工作 单一执行的例行性工作: 仅处理执行一次就结束了 at命令的工作过程 /etc/at.allow ,写在该文件的人可以使用 at 命令 /etc/at.deny ,黑名单 两个文件如果都不存在,只有 root 能使用 #at 工作调度对应的…...

ros2 action server示例、拓展、练习
注意:以下代码全部由ai生成,没有大问题,运用时需根据报错逐步调试 action server示例 将 goal、result 和 feedback 作为类的成员变量的 C 示例代码: 示例代码 #include "rclcpp/rclcpp.hpp" #include "rclcpp…...

【Go语言】安装及使用基础教程
文章目录 1. 下载安装Go官网安装使用 Homebrew 安装 (Mac)创建工作目录 (Workspace)设置环境变量通过 VSCode 扩展商店安装 Go 插件处理权限问题 2. Hello, World 示例3. 语法基础变量声明常量数组切片(Slice)Map(集合)控制结构fo…...