【从零开始的LeetCode-算法】3200. 三角形的最大高度

news2024/11/29 14:55:08

给你两个整数 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

我的解答:

class Solution {
    public int maxHeightOfTriangle(int red, int blue) {
        int max_box = red >= blue ? red : blue; 
        int min_box = red >= blue ? blue : red; 
        // 作为奇数层,每多一层奇数层,总数应为 1 4 9 16  ... 规律为n^2 
        // 作为偶数层,每多一层哦数层,总数应为 2 6 12 20...规律为n(n + 1)
        
        // 尝试使用球数最少的颜色做计算,算出奇数层最高层数
        int min_odd_level  = (int)Math.floor(Math.sqrt(min_box));
        // 判断球数最多的颜色球数量是否要大于等于奇数层*(奇数层 + 1)。
        // 如果满足,则说明在最后的奇数层下方,还可加一层偶数层,此时偶数层比奇数层相同
        int max_even_level = max_box >= min_odd_level * (min_odd_level + 1) ? min_odd_level : min_odd_level - 1;
        
        // 判断作为偶数层时层数能否增加
        int min_even_level = min_box >= min_odd_level * (min_odd_level + 1) ? min_odd_level : 0;
        // 同理:判断球数最多的颜色球数量是否要大于等于(偶数层+1)^2。
        // 如果满足,则说明在最后的偶数层下方,还可加一层奇数层,此时偶数层比奇数层多一层
        int max_odd_level  = max_box >= (min_even_level + 1) * (min_even_level + 1) ? min_even_level + 1 : min_even_level;


        return  Math.max(min_odd_level + max_even_level,min_even_level + max_odd_level);
    }
}

优化:

 移除使用sqrt()求根函数,避免内置函数使用的方法复杂且耗时【其实影响并不大,上述方法重复提交也有概率达到第一矩形上,跟网络有关】

class Solution {
    public int maxHeightOfTriangle(int red, int blue) {
        int max_box = Math.max(red,blue);
        int min_box = Math.min(red,blue);
        // 作为奇数层,每多一层奇数层,总数应为 1 4 9 16 ... 规律为n^2
        // 作为偶数层,每多一层哦数层,总数应为 2 6 12 20...规律为n(n + 1)
        for (int i = 1;; i++) {
            // 如果不满足当前层的奇数层所需数量
            if(min_box < i * i) {
                // 判断是否满足上一层偶数层数量
                // 满足,说明球数最少的颜色小球放置在偶数行能使三角形高度最高
                // 反之,说明球数最少的颜色小球放置在奇数行能使三角形高度最高
                if (min_box >= (i - 1) * i) {
                    // 判断球数最多的颜色小球是否满足当前行所需奇数球数
                    return max_box >= i*i ? 2 * i - 1 : 2 * (i - 1);
                }else{
                    // 判断球数最多的颜色小球是否满足上一行所需偶数球数
                    return max_box >= i*(i - 1) ? 2 * (i - 1) : 2 * (i - 1) - 1;
                }
            }
            // 设为奇数层时,刚好全部放置完,此时是最优的结果
            if(min_box == i * i){
                // 判断球数最多的颜色小球是否满足当前行所需偶数球数
                return max_box >= i * (i + 1) ? 2*i : 2*i - 1;
            }
        }

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2215762.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AdaTAD(CVPR 2024)视频动作检测方法详解

前言 论文&#xff1a;End-to-End Temporal Action Detection with 1B Parameters Across 1000 Frames 代码&#xff1a;AdaTAD 从论文标题可以看出&#xff0c;AdaTAD 可以在 1B 参数且输入视频在 1000 帧的情况下实现端到端的训练&#xff0c;核心创新点是引入 Temporal-Inf…

STM32传感器模块编程实践(六) 1.8寸液晶屏TFT LCD彩屏简介及驱动源码

文章目录 一.概要二.TFT彩屏主要参数三.TFT彩屏参考原理图四.TFT彩屏模块接线说明五.模块SPI通讯协议介绍六.TFT彩屏模块显示1.显示英文字符串2.显示数字3.显示中文 七.TFT彩屏实现图片显示八.STM32单片机1.8寸 TFT LCD显示实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 九…

【C++】——list 容器的解析与极致实现

人的一切痛苦&#xff0c;本质上都是对自己的无能的愤怒。 —— 王小波 目录 1、list 介绍 2、list的使用 2.1 list 的构造 2.2 iterator 的使用 2.3 list 的修改 2.4一些特殊接口 2.5 迭代器失效问题 3、实现list 3.1底层结构 结点类 list类 迭代器类 3.2功能接…

VLOG视频制作解决方案,开发者可自行定制包装模板

无论是旅行见闻、美食探店&#xff0c;还是日常琐事、创意挑战&#xff0c;每一个镜头背后都蕴含着创作者无限的热情和创意。然而&#xff0c;面对纷繁复杂的视频编辑工具&#xff0c;美摄科技凭借其前沿的视频制作技术和创新的解决方案&#xff0c;为每一位视频创作者提供了开…

服务端负载均衡和客户端负载

负载均衡分为服务端负载均衡和客户端负载均衡&#xff0c;图解&#xff1a; 客户端的负载均衡还需要从注册中心获取集群部署的服务地址&#xff0c;其中客户的负载均衡器定时读取注册中心的IP和端口&#xff0c;然后缓存起来&#xff0c;这样以后可以先判断缓存IP和端口是否可用…

矩阵基础知识

矩阵定义 矩阵的定义 1.矩阵是由一组数按照矩形排列而成的数表。矩阵通常用大写字母表示&#xff0c;例如 AA、BB 等。矩阵中的每个数称为矩阵的元素或元。 一个 mn的矩阵 AA 可以表示为&#xff1a; 其中 aij表示矩阵 A中第i行第j列的元素。 矩阵的维度 1.矩阵的维度由它…

城市形态计算方法

1、天空可视率&#xff08;Sky view factor sky&#xff09; &#xff08;1&#xff09;准备地形数据、带高度的建筑矢量数据 &#xff08;2&#xff09;将建筑矢量数据投影栅格&#xff0c;利用栅格计算器和镶嵌至新栅格得到带有建筑高度数据的地形数据 &#xff08;3&…

[Windows] 屏幕截图工具Snipaste 开发过程更轻松

前言 老大&#xff1a;你去把用户登录代码写完。 老大&#xff1a;你把这周的周报发一下 老大&#xff1a;你把生产的数据清理一下。 结果… 今天刚把登录代码写完&#xff0c;下班&#xff0c;明天就处理别的事情去了&#xff01;&#xff01;&#xff01; 之后我就… 直接…

MATLAB智能算法 - AntColonyOptimization蚁群算法

AntColonyOptimization蚁群算法 智能算法是路线规划、深度学习等等一系列领域所使用的优化算法&#xff0c;是算法进阶之路的必备之路。 前言&#xff1a;本文主要围绕解决TSP旅行商问题展开&#xff0c;对于机器人的路线规划以及非线性方程求解的问题等解决方案 对于一些其他优…

线上找工作小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 这款线上找工作小程序源码系统是一款集成了岗位发布、简历投递、在线沟通等核心功能的一站式解决方案。系统采用主流的技术栈开发&#xff0c;如PHP后端配合MySQL数据库&#xff0c;前端则利用了Vue.js框架或原生微信小程序技术&#xff0c;确保了系统的高性能与良好…

AWS账号与邮箱的关系解析

在当今数字化时代&#xff0c;云计算服务的普及使得越来越多的企业和个人用户开始使用亚马逊网络服务&#xff08;AWS&#xff09;。作为全球领先的云服务平台&#xff0c;AWS为用户提供了丰富的计算、存储和数据库服务。然而&#xff0c;对于许多新用户来说&#xff0c;关于AW…

IT圈大实话!卷运维不如卷网络安全

前言 在刚刚过去的金九银十&#xff0c;我进行了多场网络安全的技术面试&#xff0c;我发现最近很多从事运维的选择了辞职&#xff0c;转行到了网络安全这个发展路线。 说实话&#xff0c;运维工程师这个岗位在IT行业里面确实是处于最底层的&#xff0c;不管什么环节出现问题…

从“寻鲜市集”看巴奴产品主义的「新生命力」

【潮汐商业评论/原创】 “这个就是获得‘国家地理标志产品’的金阳青花椒&#xff0c;七分麻三分香&#xff0c;是麻辣火锅的灵魂&#xff1b;这个菌汤用了3种云南野生牛肝菌熬制&#xff0c;味道鲜香&#xff0c;口感顺滑&#xff1b;还有这个龙竹鲜笋可不得了&#xff0c;它…

【基于docker的深度学习训练环境】关键步骤记录

最近给公司搭建了一个小型的深度学习环境&#xff0c;实现了多人通过SSH对GPU资源的利用&#xff0c;下面对一些关键架构和易用性部分进行记录。 一、整体软硬件框架 1、硬件配置&#xff0c;采用的双GPU的方案&#xff0c;两块消费级显卡。 2、应用层架构 宿主机系统为ubunt…

猎板PCB:军工武器系统中的PCB线路板技术要求

PCB线路板在军工武器系统中的应用非常广泛&#xff0c;它们是现代军事装备中不可或缺的组成部分。军工级PCB因其在极端环境下的稳定性和可靠性而受到重视&#xff0c;这些环境可能包括高温、低温、高湿度、强辐射、高震动等条件。以下是一些关键点&#xff0c;概述了PCB线路板在…

基于华为云智慧生活生态链设计的智能鱼缸

一. 引言 1.1 项目背景 随着智能家居技术的发展和人们对高品质生活的追求日益增长&#xff0c;智能鱼缸作为一种结合了科技与自然美的家居装饰品&#xff0c;正逐渐成为智能家居领域的新宠。本项目旨在设计一款基于华为云智慧生活生态链的智能鱼缸&#xff0c;它不仅能够提供…

vue3播放m3u8格式hls监控流

1. 摄像头的hls监控流不同于普通m3u8的视频&#xff0c;video标签&#xff0c;iframe&#xff0c;videojs&#xff0c;vue-video-player无法解析 2. 解决办法 更换LivePlayer插件 官网https://www.liveqing.com/docs/manuals/LivePlayer.html#%E5%B1%9E%E6%80%A7-property 3…

kubernets(二)

集群操作 查看集群信息 kubectl get查看各组件信息 格式&#xff1a;kubectl get 资源类型 【资源名】 【选项】 events #查看集群中的所有日志信息 -o wide # 显示资源详细信息&#xff0c;包括节点、地址... -o yaml/json #将当前资源对象输出至 yaml/json 格式文…

windows安装VMware虚拟机 在虚拟机中安装Centos系统

文章目录 安装虚拟机Centos7.5 软硬件安装安装Centos所需的硬件配置处理器与内核 安装虚拟机 Centos7.5 软硬件安装 安装Centos所需的硬件 配置处理器与内核 一个CPU可以有多个内核 此处可以看出该电脑一个处理器&#xff0c;四个内核。配置虚拟器的原则是不能超过总数的一半…

Mybatis全局配置介绍

【mybatis全局配置介绍】 mybatis-config.xml&#xff0c;是MyBatis的全局配置文件&#xff0c;包含全局配置信息&#xff0c;如数据库连接参数、插件等。整个框架中只需要一个即可。 1、mybatis全局配置文件是mybatis框架的核心配置&#xff0c;整个框架只需一个&#xff1b…