(56)删除每行中的最大值

文章讲述了如何解决一个编程问题,即在一个给定的mxn矩阵中,每次删除每行的最大值,然后累加这些值。解题思路是先对每行排序,再找到每行的最大值并累加。提供了一段C++代码实现该算法。
摘要由CSDN通过智能技术生成


1. 每日一言

抱怨过去发生的一切,就等于丧失了力量,白白浪费了往事要带给我们的成长。


2. 题目

题目链接:删除每行中的最大值

给你一个 m x n 大小的矩阵 grid ,由若干正整数组成。

执行下述操作,直到 grid 变为空矩阵:

从每一行删除值最大的元素。如果存在多个这样的值,删除其中任何一个。
将删除元素中的最大值与答案相加。
注意 每执行一次操作,矩阵中列的数据就会减 1 。

返回执行上述操作后的答案。

  • 示例 1:
    输入:grid = [[1,2,4],[3,3,1]]
    输出:8
    解释:上图展示在每一步中需要移除的值。
    在第一步操作中,从第一行删除 4 ,从第二行删除 3(注意,有两个单元格中的值为 3 ,我们可以删除任一一个)。在答案上加 4 。
    在第二步操作中,从第一行删除 2 ,从第二行删除 3 。在答案上加 3 。
    在第三步操作中,从第一行删除 1 ,从第二行删除 1 。在答案上加 1 。
    最终,答案 = 4 + 3 + 1 = 8 。

  • 示例 2:
    输入:grid = [[10]]
    输出:10
    解释:上图展示在每一步中需要移除的值。
    在第一步操作中,从第一行删除 10 。在答案上加 10 。
    最终,答案 = 10 。

提示:
m == grid.length
n == grid[i].length
1 <= m, n <= 50
1 <= grid[i][j] <= 100


3. 解题思路

将给出的数组按每一行排序,排好序后,从前往后(或者从后往前)依次取最后一列上最大的那个数max,让sum+=max,最后返回就行啦~

  1. 首先使用循环遍历二维数组的每一行,对每行的元素进行排序,确保每行的元素按升序排列。
  2. 接着通过比较每行的最后一个元素,找出每行的最大值,并将每行的最大值累加到变量 sum 中。
  3. 最后函数返回 sum,此时sum就代表了删除了每行最大值后的累加和结果。

4. 代码

//实现比较函数
int cmp(const void *p1,const void *p2) {
    return *(int*)p1 - *(int*)p2;
}

int deleteGreatestValue(int** grid, int gridSize, int* gridColSize) {
    int sum = 0;//存放答案

    //用循环对每行排序
    for(int i=0;i<gridSize;i++) {
        qsort(grid[i],*gridColSize,sizeof(int),cmp);
    }

    //比较每行的最后一个元素
    int col = *gridColSize-1;
    while(col>=0) {
        int max = grid[0][col];
        for(int i= 1;i<gridSize;i++) {
            if(max<grid[i][col]) {
                max = grid[i][col];
            }
        }
        sum+=max;
        --col;
    }

    return sum;
}

在这里插入图片描述


5. 结语

请给自己些耐心,一口吃不成胖子。
山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

编程小白写作,如有纰漏或错误,欢迎指正


  • 10
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月临水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值