力扣404周赛 T1/T2/T3 枚举/动态规划/数组/模拟

news2024/10/7 8:28:04
  • 博客主页:誓则盟约
  • 系列专栏:IT竞赛 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍ 

3200.三角形的最大高度【简单

题目:

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

分析问题:

这里需要分情况讨论:

  • 奇排是蓝球:那么蓝色第一层初始值为1,往下每层个数依次+2,需要蓝色球的个数每次都加本层的个数。模拟过程,求出蓝色球的数量一共够放多少层。同样的办法求出红色球能放的总层数。两者去min值*2就是初定的层数,但是需要注意的是,这里当蓝色球层数大于红色球层数时,总层数是需要+1的,因为蓝球开始又以蓝球结束。总层数+1即为结果
  • 奇排是红球:同样的道理,设红球的初始值为1,求出层数即可。

        最后返回二者的max值即为答案。

        这道题容易产生一种错误的思路:数量多的球就应该放第一排,或者数量少的球就应该放第一排。这种思路是错的,可以自行验证。

代码实现:

class Solution:
    def maxHeightOfTriangle(self, red: int, blue: int) -> int:
        b,r=1,0
        h1,h2=1,0
        s1,s2=1,0
        while s1+h1+2<=blue:
            h1+=2
            b+=1
            s1+=h1
        while s2+h2+2<=red:
            h2+=2
            r+=1
            s2+=h2
        a=min(b,r)*2
        if b-r>=1: 
            a+=1

        r,b=1,0
        h1,h2=1,0
        s1,s2=1,0
        while s1+h1+2<=red:
            h1+=2
            r+=1
            s1+=h1
        while s2+(h2+2)<=blue:
            h2+=2
            b+=1
            s2+=h2
        k=min(b,r)*2
        if r-b>=1: k+=1
        return max(a,k)


 

3201.找出有效子序列的最大长度I【中等】 

题目: 

给你一个整数数组 nums

nums 的子序列 sub 的长度为 x ,如果其满足以下条件,则称其为 有效子序列

  • (sub[0] + sub[1]) % 2 == (sub[1] + sub[2]) % 2 == ... == (sub[x - 2] + sub[x - 1]) % 2

返回 nums 的 最长的有效子序列 的长度。

一个 子序列 指的是从原数组中删除一些元素(也可以不删除任何元素),剩余元素保持原来顺序组成的新数组。

示例 1:

输入: nums = [1,2,3,4]

输出: 4

解释:

最长的有效子序列是 [1, 2, 3, 4]

示例 2:

输入: nums = [1,2,1,1,2,1,2]

输出: 6

解释:

最长的有效子序列是 [1, 2, 1, 2, 1, 2]

示例 3:

输入: nums = [1,3]

输出: 2

解释:

最长的有效子序列是 [1, 3]

提示:

  • 2 <= nums.length <= 2 * 10**5
  • 1 <= nums[i] <= 10**7

分析问题:

         这个题是下面3202题的一种简单的情况,直接看下面一题的题解。

代码实现:

class Solution:
    def maximumLength(self, nums: List[int]) -> int:
        k=2
        f = [[0]*k for i in range(k)]
        for x in nums:
            x%=k
            for y in range(k):
                f[y][x]=f[x][y]+1
        return max(map(max,f))

 

3202.找出有效子序列的最大长度II【中等】 

题目:

给你一个整数数组 nums 和一个  整数 k 。

nums 的一个 

子序列

 sub 的长度为 x ,如果其满足以下条件,则称其为 有效子序列 :

  • (sub[0] + sub[1]) % k == (sub[1] + sub[2]) % k == ... == (sub[x - 2] + sub[x - 1]) % k

返回 nums 的 最长有效子序列 的长度。

示例 1:

输入:nums = [1,2,3,4,5], k = 2

输出:5

解释:

最长有效子序列是 [1, 2, 3, 4, 5] 。

示例 2:

输入:nums = [1,4,2,3,1,4], k = 3

输出:4

解释:

最长有效子序列是 [1, 4, 1, 4] 。

提示:

  • 2 <= nums.length <= 10**3
  • 1 <= nums[i] <= 10**7
  • 1 <= k <= 10**3

分析问题:

        这里的T3和T2是一个道理,只不过这里的k值可以是任意一个值。分析问题,看透问题的本质。其实这道题给的数组的原本的值并没用,我们需要的是他们各自对k取模之后的值,因为我们要比较的是他们的余数[0,k-1];

        对他们各自取模后,可以发现有效子序列的前两个值和后面第三个第四个值就是一个以2为周期的长度为2的数组。也就是说整个有效子序列里面奇数项是同一个数,偶数项是同一个数。奇数项还有可能等于偶数项。

        那么知道了这一点,我们用x遍历原数组nums,用y遍历0-k-1就可以可以得到一个递推关系式:f[y][x]=f[x][y]+1,因为以 3 2 结尾的话前面一个数一定是2,那么意思就是说 3 前面是以2 3 结尾的。所以f[3][2]=f[2][3]+1。

代码实现:

class Solution:
    def maximumLength(self, nums: List[int],k:int) -> int:
        f = [[0]*k for i in range(k)]
        for x in nums:
            x%=k
            for y in range(k):
                f[y][x]=f[x][y]+1
        return max(map(max,f))


 

总结:

T3代码详解:
  • 创建了一个二维列表 f ,大小为 k x k ,并初始化为全 0 。
  • 遍历 nums 列表中的每个元素 x ,将其对 k 取模的结果作为新的 x 。
  • 然后遍历 k 个值作为 y ,将 f[y][x] 的值设置为 f[x][y] + 1 。
  • 最后,使用 max(map(max, f)) 找出 f 中所有子列表中的最大值中的最大值,并将其作为结果返回。

考点:

  • 对列表的操作和遍历。
  • 二维列表的创建和使用。
  • map() 函数和 max() 函数的应用。

收获

  • 加深了对列表操作和遍历的理解,包括如何创建和修改二维列表。
  • 熟悉了 map() 函数和 max() 函数的结合使用,以找出复杂数据结构中的最大值。
  • 提高了通过代码解决数学问题的能力,例如通过取模运算和二维列表来处理数据之间的关系。

“前进!前进!!不择手段地前进!!!”——《三体:死神永生》 

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

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

相关文章

如何在 Windows 10 或 11 中恢复已删除的文件

您在 Windows PC 上找不到某个文件&#xff0c;并且您觉得可能已将其删除。我们都遇到过这种情况。但与其抱怨&#xff0c;不如尝试恢复它。假设您已经搜索过回收站&#xff0c;但一无所获&#xff0c;那么是时候求助于一个好的恢复工具了。 微软提供了自己的命令行恢复程序&a…

Omniverse、Isaac Sim、Isaac Lab入门必会之 Nucleus 部署

新手入门Omniverse、Isaac Sim、Isaac Lab时经常发现&#xff0c;要想跑通例程&#xff0c;总是usd等资源加载不出来&#xff0c;软件傻傻的进程阻塞卡在那里&#xff0c;点两下就崩溃&#xff0c;这对新手来说非常的不友好&#xff0c;这都是由于没有安装 Nucleus 或者 Nucle…

[论文笔记] gumbel-softmax 实现离散分布可微 + torch代码+ 原理 + 证明

gumbel-softmax如何实现离散分布可微+torch代码+原理+证明_gumbel softmax-CSDN博客 https://zhuanlan.zhihu.com/p/678930684 gumbelsoftmax 是为了防止丢失其他类别的梯度。 相当于不止选择概率大的那个类别被更新,其他类别的梯度也被更新了。 def sample_gumbel(shape, …

删除keil!VSvode+eide+jlink(stlink)配置keil工程,调试使用cortex-debug+openocd

文章目录 目的前期准备1.软件安装2.VScode安装3.VScode插件安装4.安装ARM-GCC交叉编译器 工程导入程序编译jlink在线调试部分常见问题更改为GCC 编译器更改为stlinkopencd一些tips调试变量查看构建器选项配置 目的 提示&#xff1a;这里可以添加技术概要 vscode代替keil进行程…

时间序列预测实战——Transformer模型实现长期预测并可视化结果(附代码+数据集+原理介绍)

论文地址->Transformer官方论文地址 官方代码地址->暂时还没有找到有官方的Transformer用于时间序列预测的代码地址 一、本文介绍 这篇文章给大家带来是Transformer在时间序列预测上的应用&#xff0c;这种模型最初是为了处理自然语言处理&#xff08;NLP&#xff09;…

多微信运营管理方案

微信作为一款社交通讯软件&#xff0c;已经成为人们日常生活中不可缺少的工具。不仅个人&#xff0c;很多企业都用微信来联系客户、维护客户和营销&#xff0c;这自然而然就会有很多微信账号、手机也多&#xff0c;那管理起来就会带来很多的不便&#xff0c;而多微信私域管理系…

CS2黑屏、闪退、掉线的解决方法一览

历时近一年&#xff0c;V社终于针对CS2进行了实质性更新&#xff0c;而不是做一些华而不实的升级。本次更新V社带来了五张全新地图&#xff0c;让各位可以在游戏内尽情享受混战和新地图带来的新乐趣。不过有很多玩家吐槽&#xff0c;自己在游玩CS2时&#xff0c;老遇到黑屏、闪…

wasm的逆向之旅一

目录 概要 技术名词解释 1、WebAssembly 指令集概览 1)基本结构 2)数据类型 3)模块和函数 4)指令概览 1.i32 整数运算 2.i32 浮点数运算&#xff08;用法同整数运算&#xff09; 3.逻辑运算和位移(用法同整数运算) 4.内存访问指令 6.控制流指令 7.模块和导出指令 8.其他常…

计组_机器指令

2024.06.13&#xff1a;计算机组成原理机器指令学习笔记 第13节 机器指令 3.1 指令的作用3.2 指令的格式3.2.1 操作码字段&#xff08;用户要干什么&#xff09;3.2.2 (操作数)地址码字段&#xff08;对谁进行操作&#xff09;3.2.3 格式分类*&#xff08;一步步优化&#xff0…

FDL专题:如何在工作中对Kettle任务进行迁移?可以直接调用吗?

IT团队历史数据同步任务过去都用的Kettle来开发&#xff0c;但kettle的定时调度不方便&#xff0c;维护成本高&#xff0c;遇到报错不知道怎么办。苦寻CSDN无果&#xff0c;只得在公司留下一个个深夜加班的背影...... IT经理想到&#xff1a;是否能将任务一步步迁移到一个统一…

易保全推动区块链应用与AI融合创新发展

数字化时代&#xff0c;区块链和人工智能技术作为当下两大“黑科技”&#xff0c;两者的深度结合&#xff0c;正在为企业数字化转型带来前所未有的机遇。 易保全作为国内权威的电子数据存证保全机构&#xff0c;积极探索两者的融合之道&#xff0c;将区块链的去中心化、不可篡…

解锁科研新动力,QtiPlot for Mac——您的数据可视化与分析首选工具!

QtiPlot for Mac&#xff0c;一款专为科研工作者和数据分析爱好者打造的数据可视化与分析神器&#xff0c;它如同科研道路上的得力助手&#xff0c;让复杂的数据分析变得简单直观。&#x1f52c;&#x1f4c8; 这款软件拥有强大的数据导入与处理能力&#xff0c;支持多种数据格…

电脑本机ip地址怎么查?介绍几种简单快捷方法

在数字时代&#xff0c;无论是网络连接、远程操作还是设备识别&#xff0c;IP地址都扮演着至关重要的角色。然而&#xff0c;对于许多电脑用户来说&#xff0c;如何快速准确地查找本机IP地址仍然是一个挑战。虎观代理小二将为您详细介绍几种简单快捷的IP地址查询方法&#xff0…

openssh9.8p1的rpm包

openssh9.8p1的rpm包 centos7下的openssh9.8p1rpm包 安装环境&#xff1a;centos7全系列 已经集成所有依赖到rpm包中&#xff0c;直接安装即可 rpm包下载链接 (免积分下载) 安装命令 tar -zxvf centos7_openssh-9.8.tar cd centos7_openssh-9.8 rpm -Uvh --force --nodeps *…

快速了解GPT-4o和GPT-4区别

GPT-4o简介 在5月14日的OpenAI举行春季发布会上&#xff0c;OpenAI在活动中发布了新旗舰模型“GPT-4o”&#xff01;据OpenAI首席技术官穆里穆拉蒂&#xff08;Muri Murati&#xff09;介绍&#xff0c;GPT-4o在继承GPT-4强大智能的同时&#xff0c;进一步提升了文本、图像及语…

VS开发QT程序图标修改

VS开发QT程序图标修改 1.双击打开UI界面 2.选择编辑资源 3.添加文件 4.选择ico文件 5.ok确定 6.点击保存 7.选择windowsIcon,倒三角图标 8.选择资源 9.选择图标&#xff0c;点击ok 10.保存 编译运行&#xff1a; 任务栏&#xff1a;

电脑免费压缩软件app哪个好?Top15压缩软件良心测评,图文详解!

你是否在寻找一款能够帮助你释放电脑存储空间的免费压缩软件app呢&#xff1f;在当今数字化生活中&#xff0c;文件和媒体内容日益增多&#xff0c;而硬盘空间却总是显得不够用。优秀的压缩工具不仅能节省空间&#xff0c;还能提升系统效率&#xff0c;让你的电脑运行更加流畅。…

Arthas实战(2)- OOM问题排查

一、 准备测试应用 新建一个 SpringBoot应用&#xff0c;写一段有 OOM bug 的代码&#xff1a; RestController RequestMapping public class JvmThreadController {List<TestWrapper> memoryList new ArrayList<>();GetMapping("/test")public Strin…

年份与产地:解锁红酒的秘密密码

在红酒的世界里&#xff0c;年份与产地如同两把神秘的钥匙&#xff0c;它们背后隐藏着红酒不同的魅力与秘密。今天&#xff0c;就让我们一起揭开这层神秘的面纱&#xff0c;探寻年份与产地如何为红酒赋予不同的灵魂&#xff0c;特别是以雷盛红酒为例&#xff0c;感受那份从岁月…

十 .pfc,bus纹波分析与抑制方法

以apfc为例 在分析时用 uin 和 iin 表示输入电压和输入电流&#xff0c;uo 和 io&#xff0c;表示输出电压和输出电流&#xff0c;Uin 和 Iin 表示输入电压和输入电流的幅值&#xff0c;则输入电压和输入电流可以分别表示为&#xff1a; 从式&#xff08;3-3&#xff09;可以…