蓝桥之统计子矩阵

样例说明
满足条件的子矩阵一共有 19 , 包含:
大小为 1×1 的有 10 个。
大小为 1×2 的有 3 个。
大小为1×3 的有 2 个。
大小为 1×4 的有 1 个。
大小为 2×1 的有 3 个。

前缀和二维数组

前缀和+暴力搜索
import java.util.*;
public class Main{private static int ans=0;public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int N=scanner.nextInt();int M=scanner.nextInt();int K=scanner.nextInt();int[][] a=new int[N+1][M+1];int[][] preSum = new int[N+1][M+1];for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){a[i][j]=scanner.nextInt();//二维数组中的各个前缀合//preSum[i][j] = a[i][j]+preSum[i-1][j]+preSum[i][j-1]-preSum[i-1][j-1];}}//暴力枚举二维数组for(int i1=1;i1<=N;i1++){//遍历行for(int i2=i1;i2<=N;i2++){for(int j1=1;j1<=M;j1++){//遍历列for(int j2=j1;j2<=M;j2++){//枚举各个满足要求的前缀和int z=preSum[i2][j2]-preSum[i2][j1-1]-preSum[i1-1][j2]+preSum[i1-1][j1-1];// System.out.println(z);if(z<=K){ans++;}}}}}for (int i = 0; i <=N; i++) {for (int j = 0; j <=M; j++) {System.out.print(preSum[i][j]+" ");}System.out.println();}System.out.println(ans);}
}
4个for循环时间复杂度比较高
采用前缀和+滑动窗口
首先对每一列进行前缀和
for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){a[i][j]=scanner.nextInt();preSum[i][j] = a[i][j]+preSum[i-1][j];}}

通过滑动窗口我们可以将4个for循环减少至3个。只需两层for循环遍历行,第三场for循环两个代表列的指针进行滑动窗口。
当遇到不满足条件的时候j+1向右移动列指针。
for(int i1=1;i1<=N;i1++){for(int i2=i1;i2<=N;i2++){int sum=0;//一个范围的区间和结束需要重新将sum更新为0for(int j1=1,j2=1;j2<=M;j2++){sum+=preSum[i2][j2]-preSum[i1-1][j2];//累加区间和System.out.println(sum);while(sum>K){sum-=preSum[i2][j1]-preSum[i1-1][j1];//不符合条件,减去上一列的区间和(通过左边界的最上层的区间和减去左下边界下一层的区间和就等于上一列的区间和)//System.out.println("preSum[i2][j1]"+preSum[i2][j1]+"-->"+"preSum[i1-1][j1]"+preSum[i1-1][j1]);j1+=1;//向右移动窗口}ans+=j2-j1+1;//j2-j1+1的长度就是符合条件的个数}}}
完整代码:
import java.util.Scanner;
import java.io.*;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {private static StreamTokenizer re=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));//快速输入private static int nextInt() throws IOException {re.nextToken();return (int)re.nval;}public static void main(String[] args) throws IOException{//Scanner scan = new Scanner(System.in);//在此输入您的代码...int N=nextInt();int M=nextInt();int K=nextInt();int[][] a=new int[N+1][M+1];int[][] preSum = new int[N+1][M+1];for(int i=1;i<=N;i++){for(int j=1;j<=M;j++){a[i][j]=nextInt();preSum[i][j] = a[i][j]+preSum[i-1][j];}}int ans=0;for(int i1=1;i1<=N;i1++){for(int i2=i1;i2<=N;i2++){int sum=0;//一个范围的区间和结束需要重新将sum更新为0for(int j1=1,j2=1;j2<=M;j2++){sum+=preSum[i2][j2]-preSum[i1-1][j2];//累加区间和// System.out.println(sum);while(sum>K){sum-=preSum[i2][j1]-preSum[i1-1][j1];//不符合条件,减去上一列的区间和(通过左边界的最上层的区间和减去左下边界下一层的区间和就等于上一列的区间和)//System.out.println("preSum[i2][j1]"+preSum[i2][j1]+"-->"+"preSum[i1-1][j1]"+preSum[i1-1][j1]);j1+=1;//向右移动窗口}ans+=j2-j1+1;//j2-j1+1的长度就是符合条件的个数}}}System.out.println(ans);}
}
模拟过程

相关文章:
蓝桥之统计子矩阵
样例说明 满足条件的子矩阵一共有 19 , 包含: 大小为 11 的有 10 个。 大小为 12 的有 3 个。 大小为13 的有 2 个。 大小为 14 的有 1 个。 大小为 21 的有 3 个。 前缀和二维数组 前缀和暴力搜索 import java.util.*; public class Main{private static int ans0;pub…...
Java的基础面试题
一.java基础1.JDK和JRE有什么区别?JDK是java开发工具包,JRE是java运行时环境(包括Java基础类库,java虚拟机)2.和equals的区别是什么?比较的是两者的地址值,equals比较的是两者的内容是否一样3.两…...
J1939故障码诊断说明
1:1939整体协议说明 这里主要说明1939不同的协议,对应不同的网络分层 注意了,这里只进行文档解析说明,具体查看去搜素协议的关键字进行理解 2:DMx和FMI 说明 想知道每个代号的具体含义,可以去 saeJ1939…...
XCPC第十三站,贪心问题
一.区间选点 我们采取这样的策略来选点:step(1)将区间按照右端点的大小从小到大排序;step(2)从前往后依次枚举每个区间,如果当前区间中已经包含点,直接pass,否则选当前区…...
一文让你吃透 Vue3中的组件间通讯 【一篇通】
文章目录前情回顾前言1. 父组件 > 子组件通讯传递2. 子组件 > 父组件通讯传递3. 爷孙组件,后代组件通讯数据总结前情回顾 在本专栏前一章节中,我为大家带来了 Vue3 新特性变化上手指南 的归纳梳理,主要介绍了 Vue3 的 Proxy 响应式原理…...
EVE遭遇大规模DDOS攻击,玩家和官方都傻眼了
如果你恰好是一名《星战前夜》(EVE)的国际服玩家(虽然这个几率很小),又恰好因为疫情一直待在家里,那你就真是倒霉透顶了。因为从1月底开始,EVE的服务器就一直受到大规模的DDOS攻击,而…...
【数据结构】二叉树及相关习题详解
新年新气象! 祝大家兔年 财源滚滚! 万事胜意! 文章目录前言1. 树的一些基础概念1.1 树的一些基本概念1.2 树的一些重要概念2. 二叉树的一些基本概念2.1 二叉树的结构2.2 两种特殊的二叉树3. 二叉树的性质4. 二叉树的存储5. 二叉树的基本操作5.1 构造一棵二叉树5.2 二叉树的遍历…...
锂电池充电的同时也能放电吗?
大家应该都有这样经历,我们的手机在充电的同时也能边使用,有的同学就会说了,这是因为手机电池在充电的同时也在放电。如果这样想我们可能就把锂电池类比了一个蓄水池,以为它在进水的同时也能出水,其实这个比喻是错误的…...
通信工程考研英语复试专有名词翻译
中文英文频分多址Frequency Division Multiple Access码分多址Code Division Multiple Access时分多址Time Division Multiple Access移动通信mobile communication人工智能artificial intelligence水声通信Middle-Range Uwa Communication正交频分复用Orthogonal frequency di…...
注意力机制(四):多头注意力
专栏:神经网络复现目录 注意力机制 注意力机制(Attention Mechanism)是一种人工智能技术,它可以让神经网络在处理序列数据时,专注于关键信息的部分,同时忽略不重要的部分。在自然语言处理、计算机视觉、语…...
【2023Unity游戏开发教程】零基础带你从小白到超神19——射线检测
文章目录 射线检测从某点发射一条射线从摄像机发射一条射线射线检测 游戏中的红外线,默认肉眼是看不到的,从某个初始点开始,沿着特定的方向发射一条不可见且无限长的射线,通过此射线检测是否有任何模型添加了Collider碰撞器组件。一旦检测到碰撞,停止射线继续发射。 碰撞检…...
内存泄漏和内存溢出的区别
参考答案 内存溢出(out of memory):指程序在申请内存时,没有足够的内存空间供其使用,出现 out of memory。内存泄露(memory leak):指程序在申请内存后,无法释放已申请的内存空间,内存泄露堆积会导致内存被…...
文本三剑客之sed编辑器
文本三剑客:都是按行读取后处理。 grep 过滤行内容。awk 过滤字段。sed 过滤行内容;修改行内容。sed编辑器 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中…...
深度学习:GPT1、GPT2、GPT-3
深度学习:GPT1、GPT2、GPT3的原理与模型代码解读GPT-1IntroductionFramework自监督学习微调ExperimentGPT-2IntroductionApproachConclusionGPT-3GPT-1 Introduction GPT-1(Generative Pre-training Transformer-1)是由OpenAI于2018年发布的…...
使用Docker 一键部署SpringBoot和SpringCloud项目
使用Docker 一键部署SpringBoot和SpringCloud项目 1. 准备工作2. 创建Dockerfile3. 创建Docker Compose文件4. 构建和运行Docker镜像5. 验证部署6. 总结Docker是一个非常流行的容器化技术,可以方便地将应用程序和服务打包成容器并运行在不同的环境中。在本篇博客中,我将向您展…...
【数据结构】用栈实现队列
💯💯💯 本篇总结利用栈如何实现队列的相关操作,不难观察,栈和队列是可以相互转化的,需要好好总结它们的特性,构造出一个恰当的结构来实现即可,所以本篇难点不在代码思维,…...
[Netty源码] 服务端启动过程 (二)
文章目录1.ServerBootstrap2.服务端启动过程3.具体步骤分析3.1 创建服务端Channel3.2 初始化服务端Channel3.3 注册selector3.4 端口绑定1.ServerBootstrap ServerBootstrap引导服务端启动流程: //主EventLoopGroup NioEventLoopGroup master new NioEventLoopGroup(); //从E…...
Week 14
代码源每日一题Div2 106. 订单编号 原题链接:订单编号 思路:这题本来没啥思路,直到获得了某位佬的提示才会做( 我们可以用set来维护一些区间,这些区间为 pair 类型,表示没有使用过的编号,每次…...
【微信小程序】-- 使用 Git 管理项目(五十)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
leetcode每日一题:134. 加油站
系列:贪心算法 语言:java 题目来源:Leetcode134. 加油站 题目 在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[…...
手把手教你用高云FPGA的Video Frame Buffer IP搞定OV7725摄像头到HDMI显示(附源码)
高云FPGA视频处理实战:OV7725摄像头数据缓存与HDMI输出全解析 在嵌入式视觉系统开发中,FPGA因其并行处理能力和低延迟特性,成为实时视频处理的理想选择。高云FPGA作为国产芯片的代表,其Video Frame Buffer等硬核IP为开发者提供了高…...
构图不是靠感觉!用Fitts定律+格式塔原理验证的Midjourney 6大构图公式(附Python自动构图评分脚本)
更多请点击: https://kaifayun.com 第一章:构图不是靠感觉!用Fitts定律格式塔原理验证的Midjourney 6大构图公式(附Python自动构图评分脚本) 构图绝非主观直觉,而是可量化、可验证的视觉认知工程。我们基于…...
CANN/pypto量化矩阵乘法
pypto.scaled_mm 【免费下载链接】pypto PyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。 项目地址: https://gitcode.com/cann/pypto 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT√ 功能说明 实现mat_…...
分布式团队的代码协作规范:从分支策略到提交信息格式
在分布式团队模式下,代码协作的地域分散、时区差异和沟通成本,给版本控制和质量保障带来了严峻挑战。作为软件测试从业者,我们不仅是代码质量的“守门员”,更需要深入理解并推动执行规范的代码协作流程,从分支管理到提…...
机器学习论文有效阅读:三层穿透法定位技术杠杆点
1. 这不是“读论文”,而是“拆解模型生长的土壤”你有没有过这种体验:打开一篇顶会论文,标题写着《Neural Architecture Search with Reinforcement Learning》,摘要读得热血沸腾,结果翻到Methodology部分,…...
手写NumPy版RBM:从能量函数到吉布斯采样的可调试实现
1. 项目概述:这不是又一个“RBM扫盲帖”,而是一次亲手拆解神经网络祖师爷级模型的实操复盘Restricted Boltzmann Machine(受限玻尔兹曼机),简称RBM,不是教科书里那个被反复引用却没人真去跑通的抽象符号&am…...
实战指南:5个关键技术揭秘PUBG罗技鼠标宏后坐力控制脚本
实战指南:5个关键技术揭秘PUBG罗技鼠标宏后坐力控制脚本 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg logitech-pubg是一个针对《绝…...
GNSS信号丢了也不怕:这款组合导航系统真硬核
在无人系统快速发展的今天,精准可靠的定位导航已成为各类智能装备的核心刚需。然而,传统高精度组合导航系统往往价格昂贵,让许多项目团队望而却步。ER-GNSS/MINS-03为了打破这一僵局——将战术级MEMS惯性器件与全系统全频点双天线GNSS模块深度…...
数据鲸鱼具身智能task3
我的理解:模型广场提供了模型的雏形与底座,是一些已经85分的通用模型,各任务可以基于这里的模型去试验,根据试验的结果(这里就到了数据管理)发现数据的偏向或侧重点不同,根据这种数据的表现差异…...
基于ZYNQ与IgH的EtherCAT主站方案:软硬协同实现工业实时控制
1. 项目概述:当工业实时网络遇上可编程SoC在工业自动化领域,实时性和确定性是永恒的核心诉求。EtherCAT作为高性能的工业以太网协议,以其独特的“飞读飞写”数据处理机制和极低的通信抖动,成为了众多高精度运动控制、机器人、半导…...
