当前位置: 首页 > news >正文

矩阵简单问题(Java)

 问题: 顺时针打印二维方阵:
 1 2 3 4 15
 5 6 7 8 14
 9 10 11 12 13
 13 14 15 16

public class Test1 {public static void main(String[] args) {int[][] arr = new int[][]{{1, 2, 3, 4,100},{5, 6, 7, 8,101},{9, 10, 11, 12,102},{13, 14, 15, 16,103}};f1(arr);}static void f1(int[][] arr) {int leftRow = 0, leftCol = 0; //左上int rightRow = arr.length - 1, rightCol = arr[0].length - 1; //右下while (leftRow <= rightRow && leftCol <= rightCol) {for (int i = leftCol; i <= rightCol; i++) {System.out.print(arr[leftRow][i] + " ");}for (int i = leftRow + 1; i <= rightRow; i++) {System.out.print(arr[i][rightCol] + " ");}for (int i = rightCol - 1; i >= leftCol; i--) {System.out.print(arr[rightRow][i] + " ");}for (int i = rightRow - 1; i > leftRow; i--) {System.out.print(arr[i][leftCol] + " ");}leftRow++;leftCol++;rightRow--;rightCol--;}}
}

 问题:0所在的行和列清零
 1 2 3 4
 6 0 7 8
 9 10 0 11

只能先遍历一遍记录下0的位置,然后在改0

public class Test1 {public static void main(String[] args) {int[][] arr = new int[][]{{1, 2, 3, 4,100},{5, 6, 0, 8,101},{9, 10, 11, 0,102},{13, 14, 15, 16,103}};f2(arr);for (int[] ints : arr) {for (int i : ints) {System.out.print(i+" ");}System.out.println("");}}static void f2(int[][] arr){int m = arr.length,n = arr[0].length;int[] row = new int[m];int[] col = new int[n];for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(arr[i][j] == 0){row[i]=1;col[j]=1;}}}for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(row[i]==1 || col[j]==1){arr[i][j]=0;}}}}
}

 问题:“Z”型打印
1,2, 3, 4
5,6, 7, 8
9,10,11,12 结果为1 2 5 9 6 3 4 7 10 11 8 12

public class Test1 {public static void main(String[] args) {int[][] arr = new int[][]{{1,2, 3, 4},{5,6, 7, 8},{9,10,11,12}};f3(arr);}static void f3(int[][] arr){int row = 0,m = arr.length;int col = 0,n = arr[0].length;boolean flag = true;  //控制是斜向上打印还是斜向下打印while(row<m && col<n){if(flag){System.out.print(arr[row][col]+" ");if(row==0 && col <n-1){ //斜上打印,碰到上端,就打印右边的,然后在斜向下col++;flag=false;} else if (row>0 && col== n-1) {//斜上打印,碰到右端,就打印下边的,然后在斜向下row++;flag=false;}else {row--;col++;}}else {System.out.print(arr[row][col]+" ");if(col==0 && row < m-1){ //斜下打印,碰到左端,就打印下边的,然后在斜向上row++;flag=true;} else if (col > 0 && row == m - 1) {//斜下打印,碰到下端,就打印右边的,然后在斜向上col++;flag=true;}else {row++;col--;}}}}
}

给定一个n*n矩阵,值只有0和1 返回边框为1的最大正方形的边长长度
0,1,1,1,1
0,1,0,0,1
0,1,0,0,1
0,1,1,1,1
0,1,0,1,1 返回4

public class Test1 {public static void main(String[] args) {int[][] arr = new int[][]{{0,1,1,1,1},{0,1,0,0,1},{0,1,0,0,1},{0,1,1,1,1},{0,1,0,1,1}};System.out.println(f4(arr));}static int f4(int[][] arr){int n = arr.length;helper(arr);while(n>=1){for(int i=0;i<arr.length;i++){for(int j=0;j<arr.length;j++){if(i+n>arr.length || j+n>arr.length){continue;}/*if(test(arr,i,j,n)){return n;}*/if(help[i][j][0]>=n && help[i][j][1]>=n && help[i][j+n-1][1]>=n && help[i+n-1][j][0]>=n)return n;}}n--;}return 0;}static int[][][] help;  // 0为右边1的个数,1为下面1的个数//构建三维数组,维护每一元素1的个数static void helper(int[][] arr){int n=arr.length;help=new int[n][n][2];int row= n-1;//先填充好最下面的一行for(int j=n-1;j>=0;j--){int value = arr[row][j];if(value==1){if(j==n-1)help[row][j][0]=1;else help[row][j][0]=help[row][j+1][0]+1;help[row][j][1]=1;}}row--;//在逐渐向上遍历for (int i=row;i>=0;i--){for(int j=n-1;j>=0;j--){int value = arr[i][j];if(value==1){if(j==n-1)help[i][j][0]=1;else help[i][j][0]=help[i][j+1][0]+1;help[i][j][1]=help[i+1][j][1]+1;}}}}
}

问题:求最大子矩阵累加和,其值有正、有负、有0,返回子矩阵的最大累加和
解法:将矩阵中每行的相同列的元素逐渐相加,转化为 无序的一维数组求最大连续累加和。

那么我们先求一个一维无序数组arr,返回arr中子数组(连续)的最大累加和。

public class Test2 {public static void main(String[] args) {}static int f1(int[] arr){if(arr.length==0) return 0;int sum=arr[0],max=arr[0];int left = 0, right = 0;for(int i=1;i<arr.length;i++){if(sum<=0){sum=arr[i];left=i;//这里不能用continue,因为不能保证最大累加和大于0,可能每个元素都小于0.}else sum+=arr[i];if(sum>max){max=sum;right=i;}}System.out.println("left="+left+" ,right="+right);return max;}
}

然后按列求和,维护一个sum数组,sum[i]为第i列的元素求和,先是从第0行到最后一行的所有列求和,每加一次,求一次sum数组的最大子序列。然后在清空sum,然后在是第1行到最后一行的所有列求和,每次求和,求一次sum数组的最大子序列,然后在从第2行开启,直到遍历完所有行。

public class Test2 {public static void main(String[] args) {int[][] arr = new int[][]{{-90,48,78},{64,-40, 64},{-81,-7,66}};System.out.println(f2(arr));}static int f1(int[] arr){if(arr.length==0) return 0;int sum=arr[0],max=arr[0];int left = 0, right = 0;for(int i=1;i<arr.length;i++){if(sum<=0){sum=arr[i];left=i;//这里不能用continue,因为不能保证最大累加和大于0,可能每个元素都小于0.}else sum+=arr[i];if(sum>max){max=sum;right=i;}}System.out.println("left="+left+" ,right="+right);return max;}static int f2(int[][] arr){int row = 0; //从第一行作为起始行int m = arr.length;int n = arr[0].length;//按列求和int[] sums = new int[m];int max=0; //历史子矩阵累加和while(row<m){for(int i=row;i<m;i++){for(int j=0;j<n;j++){sums[j]+=arr[j][i];}//累加完成//求无序一维数组的最大连续累加和int t = f1(sums);max=Math.max(max,t);}//以下一行作为起始行,Arrays.fill(sums,0);row++;}return max;}
}

相关文章:

矩阵简单问题(Java)

问题&#xff1a; 顺时针打印二维方阵&#xff1a; 1 2 3 4 15 5 6 7 8 14 9 10 11 12 13 13 14 15 16 public class Test1 {public static void main(String[] args) {int[][] arr new int[][]{{1, 2, 3, 4,100},{5, 6, 7, 8,101},{9, 10, 11, 12,102},{13, 14, 15, 16,…...

Elasticsearch DSL版

文章目录 1.索引库操作创建索引库&#xff1a;删除索引库&#xff1a;查询索引库&#xff1a;修改索引库&#xff1a;总结 2.文档操作创建文档&#xff1a;查询文档&#xff1a;删除文档&#xff1a;全量修改文档&#xff1a;增量修改文档&#xff1a;总结 3.DSL查询语法&#…...

2024-12-29-sklearn学习(26)模型选择与评估-交叉验证:评估估算器的表现 今夜偏知春气暖,虫声新透绿窗纱。

文章目录 sklearn学习(26) 模型选择与评估-交叉验证&#xff1a;评估估算器的表现26.1 计算交叉验证的指标26.1.1 cross_validate 函数和多度量评估26.1.2 通过交叉验证获取预测 26.2 交叉验证迭代器26.2.1 交叉验证迭代器–循环遍历数据26.2.1.1 K 折26.2.1.2 重复 K-折交叉验…...

STM32CUBEIDE FreeRTOS操作教程(十二):std dynamic memory 标准动态内存

STM32CUBEIDE FreeRTOS操作教程&#xff08;十二&#xff09;&#xff1a;std dynamic memory 标准动态内存 STM32CUBE开发环境集成了STM32 HAL库进行FreeRTOS配置和开发的组件&#xff0c;不需要用户自己进行FreeRTOS的移植。这里介绍最简化的用户操作类应用教程。以STM32F40…...

异步爬虫之aiohttp的使用

在上一篇博客我们介绍了异步爬虫的基本原理和 asyncio 的基本用法&#xff0c;并且在最后简单提及了使用aiohttp 实现网页爬取的过程。本篇博客我们介绍一下 aiohttp 的常见用法。 基本介绍 前面介绍的 asyncio模块&#xff0c;其内部实现了对 TCP、UDP、SSL协议的异步操作&a…...

【Rust自学】9.1. 不可恢复的错误以及panic!

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 9.1.1. Rust错误处理概述 Rust拥有极高的可靠性&#xff0c;这也延伸到了错误处理的领域。比如说在大部分情况下&#xff0c;Rust会迫使你…...

【老张的程序人生】一天时间,我成软考高级系统分析师

今年下半年&#xff0c;我心血来潮报考了软考高级系统分析师。彼时的我&#xff0c;工作繁忙至极&#xff0c;一周十四节课&#xff0c;班主任的职责压身&#xff0c;还兼任教学管理事务&#xff0c;每日忙得晕头转向&#xff0c;那点可怜的闲暇时光&#xff0c;也都奉献给了游…...

vue使用el-select下拉框自定义复选框

在 Vue 开发中&#xff0c;高效且美观的组件能极大地提升用户体验和开发效率。在vue中使用elementplus 的 el-select下拉框实现了一个自定义的多选下拉框组件。 一、代码功能概述 这段代码创建了一个可多选的下拉框组件&#xff0c;通过el-select和el-checkbox-group结合的方…...

k8s基础(2)—Kubernetes-Namespace

一、Namespace概述 名字空间 在 Kubernetes 中&#xff0c;名字空间&#xff08;Namespace&#xff09; 提供一种机制&#xff0c;将同一集群中的资源划分为相互隔离的组。 同一名字空间内的资源名称要唯一&#xff0c;但跨名字空间时没有这个要求。 名字空间作用域仅针对带有…...

APM for Large Language Models

APM for Large Language Models 随着大语言模型&#xff08;LLMs&#xff09;在生产环境中的广泛应用&#xff0c;确保其可靠性和可观察性变得至关重要。应用性能监控&#xff08;APM&#xff09;在这一过程中发挥了关键作用&#xff0c;帮助开发者和运维人员深入了解LLM系统的…...

Spark Runtime Filter

Runtime Filter 参考链接&#xff1a; https://docs.google.com/document/d/16IEuyLeQlubQkH8YuVuXWKo2-grVIoDJqQpHZrE7q04/edit?tabt.0https://www.modb.pro/db/557718https://issues.apache.org/jira/browse/SPARK-32268https://github.com/apache/spark/pull/35789https…...

AI大模型系列之七:Transformer架构讲解

目录 Transformer网络是什么&#xff1f; 输入模块结构&#xff1a; 编码器模块结构&#xff1a; 解码器模块: 输出模块结构&#xff1a; Transformer 具体是如何工作的&#xff1f; Transformer核心思想是什么&#xff1f; Transformer的代码架构 自注意力机制是什么…...

基于51单片机(STC12C5A60S2)和8X8彩色点阵屏(WS2812B驱动)的小游戏《贪吃蛇》(普中开发板矩阵按键控制)

目录 系列文章目录前言一、效果展示二、原理分析三、各模块代码1、定时器02、矩阵按键3、8X8彩色点阵屏 四、主函数总结 系列文章目录 前言 《贪吃蛇》&#xff0c;一款经典的、怀旧的小游戏&#xff0c;单片机入门必写程序。 以《贪吃蛇》为载体&#xff0c;熟悉各种屏幕的使…...

遇到复杂的 递归查询sql 需要oracle 转pgsql 可以把数据表结构给ai

遇到复杂的 递归查询sql 需要oracle 转pgsql 可以把数据表结构给ai 并且 建立备份表 把需要的很少的数据放到表里面 这样 ai 可以很好的判断sql 咋写 还可以&#xff0c;让ai解释oracle sql 然后拿到描述和表和字段&#xff0c;给ai让他生成pgsql 的sql&#xff0c;亲测有效...

Zynq PS端外设之GPIO

1. GPIO&#xff08;通用输入/输出&#xff09; GPIO外设有4个Bank&#xff0c;Bank0/1通过MIO连接到PS的引脚上&#xff1b;Bank2/3通过EMIO连接到PL的引脚上。 注意&#xff1a;Bank1的电平要改成LVCOMS 1.8 GPIO寄存器 寄存器&#xff1a; DATA_RO&#xff1a; 读取GPIO的输…...

Spring Boot项目开发常见问题及解决方案(上)

启动相关问题 问题 1&#xff1a;项目启动时报错“找不到主类” 在使用 Spring Boot 打包成可执行 JAR 文件后启动&#xff0c;有时会遇到这个头疼的问题。通常是因为打包配置有误或者项目结构不符合要求。 解决方案&#xff1a; 首先&#xff0c;检查 pom.xml&#xff08;Ma…...

Elasticsearch: 高级搜索

这里写目录标题 一、match_all匹配所有文档1、介绍&#xff1a; 二、精确匹配1、term单字段精确匹配查询2、terms多字段精确匹配3、range范围查询4、exists是否存在查询5、ids根据一组id查询6、prefix前缀匹配7、wildcard通配符匹配8、fuzzy支持编辑距离的模糊查询9、regexp正则…...

STM32 拓展 电源控制

目录 电源控制 电源框图 VDDA供电区域 VDD供电区域 1.8V低电压区域 后备供电区域 电压调节器 上电复位和掉电复位 可编程电压检测器(PVD) 低功耗 睡眠模式(只有CUP(老板)睡眠) 进入睡眠模式 退出睡眠模式 停机(停止)模式(只留核心区域(上班)) 进入停…...

SpringBootWeb案例-1

文章目录 SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建 1.2 开发规范 2. 部门管理2.1 查询部门2.1.1 原型和需求2.1.2 接口文档2.1.3 思路分析2.1.4 功能开发2.1.5 功能测试 2.2 前后端联调2.3 删除部门2.3.1 需求2.3.2 接口文档2.3.3 思路…...

HTML——57. type和name属性

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>type和name属性</title></head><body><!--1.input元素是最常用的表单控件--><!--2.input元素不仅可以在form标签内使用也可以在form标签外使用-…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...