| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> [双指针]统计子矩阵 2022年蓝桥杯 -> 正文阅读 |
|
[数据结构与算法][双指针]统计子矩阵 2022年蓝桥杯 |
题目描述 给定一个 N × M 的矩阵 A,请你统计有多少个子矩阵 (最小 1 × 1,最大 N × M) 满足子矩阵中所有数的和不超过给定的整数 K? 输入 第一行包含三个整数 N, M 和 K. 之后 N 行每行包含 M 个整数,代表矩阵 A. 输出 一个整数代表答案。 样例输入 3 4 10 1 2 3 4 5 6 7 8 9 10 11 12 样例输出 19 提示 满足条件的子矩阵一共有 19,包含: 大小为 1 × 1 的有 10 个。 大小为 1 × 2 的有 3 个。 大小为 1 × 3 的有 2 个。 大小为 1 × 4 的有 1 个。 大小为 2 × 1 的有 3 个。 对于 30% 的数据,N, M ≤ 20. 对于 70% 的数据,N, M ≤ 100. 对于 100% 的数据,1 ≤ N, M ≤ 500; 0 ≤ Ai j ≤ 1000; 1 ≤ K ≤ 250000000. 题意: 题意很明确,就是从n*m的矩阵中找到有多少个和小于等于k的子矩阵。 分析: 直接暴力是O(n^4),只能过70%数据,而要想满分就需要一些技巧上的优化。如果还是按照二维前缀和的思路走下去其实并不好优化,这里需要换一种枚举矩阵的思路,一个矩阵由两维确定,可以先枚举出一维的区间,然后在其中枚举另一维区间,第一次枚举是O(n^2)的,而第二次枚举就可以用双指针优化成O(n)了,思路类似于求区间和不大于k的子段个数。 具体代码如下:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/12 17:36:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |