2679. 矩阵中的和
给你一个下标从 0 开始的二维整数数组 nums 。一开始你的分数为 0 。你需要执行以下操作直到矩阵变为空:
矩阵中每一行选取最大的一个数,并删除它。如果一行中有多个最大的数,选择任意一个并删除。
在步骤 1 删除的所有数字中找到最大的一个数字,将它添加到你的 分数 中。
请你返回最后的 分数 。
示例 1:
输入:nums = [[7,2,1],[6,4,2],[6,5,3],[3,2,1]]
输出:15
解释:第一步操作中,我们删除 7 ,6 ,6 和 3 ,将分数增加 7 。下一步操作中,删除 2 ,4 ,5 和 2 ,将分数增加 5 。最后删除 1 ,2 ,3 和 1 ,将分数增加 3 。所以总得分为 7 + 5 + 3 = 15 。
示例 2:
输入:nums = [[1]]
输出:1
解释:我们删除 1 并将分数增加 1 ,所以返回 1 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/sum-in-a-matrix/
第一次执行代码
代码逻辑为
使用MAX[i][0]记录每一次遍历完每一行矩阵之后获取到的最大值,在每一次更新最大值的时候使用MAX[i][1]记录矩阵中最大值所在位置
在遍历完一行矩阵后将最大值记录并将其置0
遍历整个矩阵之后,比较所有行的最大值并且比对得到这一轮的分数,并且判断是否将矩阵中所有元素置0,是否已经完成所有元素的删除(通过将矩阵所有值相加为sum1判断sum1是否为0实现)
而在逻辑正确的前提下,发现了这些问题
在 while(sum1!=0) 循环之前,sum1 没有被初始化。需要将 sum1 初始化为非零的值,否则循环条件将永远为假,导致代码不会进入循环。
在内层的 for 循环中,对于每一行的元素求和的逻辑是不正确的。应该在外层的 for 循环之前初始化 sum1 为0,然后在内层的 for 循环中累加每个元素的值。
在内层的 for 循环中,你需要检查最大值 MAX[i][0] 是否等于当前元素值 nums[i][j],而不仅仅是检查是否大于 MAX[i][0]。如果相等,你需要更新最大值的位置 MAX[i][1]。
在 while 循环中,需要在每次迭代之前将 MAX1 初始化为0。否则,MAX1 的值将保留上一次循环的最大值。
在 while 循环中,需要更新 sum1 的值,以便在下一次迭代时正确判断是否进入循环。你可以在每次迭代之前将 sum1 赋值为 numsSize,这样如果在循环内部没有对 sum1 进行更新,循环条件将会在下一次迭代时为假,从而结束循环。
更改后的代码
__EOF__

本文链接:https://www.cnblogs.com/noobwei/p/17535577.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)