首页 > 其他分享 >(nice!!!)LeetCode 2713. 矩阵中严格递增的单元格数(动态规划、哈希表)

(nice!!!)LeetCode 2713. 矩阵中严格递增的单元格数(动态规划、哈希表)

时间:2024-06-19 19:59:55浏览次数:19  
标签:tmp 2713 int res 最大值 单元格 second 哈希 row

2713. 矩阵中严格递增的单元格数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路:1、先对数组中的元素按值从小到大处理
2、对于当前的元素值,可以更新当前所在行和列的最大值。
3、最后每一行或每一列的最大值即为所求值
细节看注释

class Solution {
public:
    int maxIncreasingCells(vector<vector<int>>& mat) {
        map<int ,vector<pair<int ,int>>> mp;
        int n=mat.size(),m=mat[0].size();
        //先对数组中的元素按值从小到大排好序
        //可能存在相同的元素值,所以用到数组来存下标的位置
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                mp[mat[i][j]].push_back({i,j});
            }
        }
        //记录每一行、每一列的最大值
        vector<int> row(n,0),col(m,0);
        //这里用到迭代器,没有用auto方法遍历
        map<int ,vector<pair<int ,int>>>::iterator tmp;
        //记录最大值
        int mx=0;
        //遍历每一个元素值
        for(tmp=mp.begin();tmp!=mp.end();tmp++){
        	//当前处理的元素值
            int key=tmp->first;
            //用于存储当前位置更新的最大值
            vector<int> res;
            //处理当前元素值的所有位置
            for(auto t:tmp->second){
            	//用res存储,而不是及时更新,就是怕影响后面位置的处理
                res.push_back(max(row[t.first],col[t.second])+1);
            }
            int i=0;
            //更新当前元素值的所有位置带来的行、列最大值
            for(auto t:tmp->second){
                row[t.first]=max(row[t.first],res[i]);
                col[t.second]=max(col[t.second],res[i]);
                i++;
                mx=max(mx,row[t.first]);
            }
            
        }
        return mx;
    }
};

标签:tmp,2713,int,res,最大值,单元格,second,哈希,row
From: https://blog.csdn.net/weixin_46028214/article/details/139811182

相关文章

  • C#使用 NPOI 添加图片到 Excel 单元格
    入参:工作簿对象,某个单元格对象,将要写入的图片字节数组 对象解释:XSSFClientAnchor:可设置图片放置的开始、结束单元格,X、Y起始点位(这里挖个坑,具体设置多少可以根据行高等进行计算,具体可参考pic.Resize()的实现)///<summary>///将图片添加到工作簿///</summary>/......
  • 力扣2713 2024.6.19
    原题网址:此处为链接个人难度评价:1700分析:DP顺序很重要,从大数递推到小数保证了不会每次都是最优子结构而不会有后效性。开了个map来方便二分大于当前数的最小数,状态转移方程显然,记h[x]与l[y]表示第x行小于当前值的最优和第y列小于当前值的最优:dp[x][y]=max(f[x],l[y])注意......
  • 哈希查找(按个位取余的方式)
    步骤:1.构建哈希表进行分类2.进行哈希查找(算法)处理冲突:按个位取余发现有两个或多个数重复,如:会发现15,25,55,重叠了,对此进行冲突处理,冲突处理有三种:1.地址偏移法以上图为例,将和25按个位取余后重复的数填到25后面的位置,如果相邻的位置满了,在向后填。2.再哈希法 再次使......
  • java freemarker实现单元格动态合并
    在Java项目中,使用FreeMarker模板引擎来动态生成Excel文件,并实现单元格的动态合并(特别是行合并)。可以通过以下步骤来完成:1.准备数据模型        需要准备一个合适的数据模型,该模型应能表示出哪些单元格需要合并。        例如,如果想要根据某一列的值来决定......
  • 使用 shell 快速生成字符串的哈希值
    使用方式echo-n"dev"|sha256sum|cut-d''-f1此外也可以使用md5sum、sha224sum、sha1sum等,替换命令中的sha256sum即可。命令解释echo将字符串"dev"通过管道符传递给标准输出,-n选项可以去掉多余的换行符sha256sum本身接收的参数是文件路径,如果不指定,则从标......
  • (算法)找到字符串中所有字母异位词——<滑动窗⼝+哈希表>
    1.题⽬链接:438.找到字符串中所有字⺟异位词2.题⽬描述:3.解法(滑动窗⼝+哈希表): 算法思路:◦因为字符串p的异位词的⻓度⼀定与字符串p的⻓度相同,所以我们可以在字符串s中构造⼀个⻓度为与字符串p的⻓度相同的滑动窗⼝,并在滑动中维护窗⼝中每种字⺟的数量; ◦当窗......
  • MD5哈希加密算法
    [TOP]简介MD5(Message-DigestAlgorithm5)是一种被广泛使用的密码散列函数,它可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。MD5并不是一种加密算法(因为它不可逆),而是一种摘要算法或哈希算法。以下是MD5加密(更准确地说是哈希)原理的简要概述:说明输入:MD......
  • Redis是一个高性能的键值对数据库,它支持多种数据结构,如字符串、列表、集合、有序集合
    Redis是一个高性能的键值对数据库,它支持多种数据结构,如字符串、列表、集合、有序集合和哈希表。以下是一些Redis命令的实践示例,帮助你了解如何使用Redis。连接Redis服务器首先,使用redis-cli命令连接到Redis服务器:redis-cli-h<hostname>-p<port>基本命令PING:检查Redis......
  • Excel单元格的“点选输入”:数据验证应用
    在Excel中,用“数据验证”功能可以设置下拉列表,二级下拉列表需要设置公式。(笔记模板由python脚本于2024年06月16日18:36:37创建,本篇笔记适合经常使用Excel处理数据的coder翻阅)【学习的细节是欢悦的历程】Python官网:https://www.python.org/Free:大咖免费“圣......
  • MD5哈希长度延展攻击(选做)
    任务详情任务描述:在一个使用MD5哈希算法的系统中,管理员使用了一个密钥k和命令cmd的组合来生成每个命令的签名:hash(k||cmd)。你已经获得了一个允许查看文件的命令cmd=viewfile和对应的签名h,但你希望通过哈希长度延展攻击,生成一个新的签名,该签名能够让你执行删除文件的命令(删除文......