蓝桥杯算法基础(24):多维数组与矩阵(4道小题)java版

题1:顺时针打印二维数组

static void print(int[][] matrix){int leftUpRow=0,leftUpCol=0,rightDownRow=matrix.length-1,rightDownCol=matrix[0].length-1;while(leftUpRow<=rightUpRow&&leftUpCol<=rightDownCol){//在不是方阵的情况下,是扁平的时,左右或是上下间距小的先结束,//也就是说最后肯定剩一行,无论是竖着一行还是横着一行,上一行结束后,//上下左右边界改变,间距小的合并到一起,当遍历到头时,由于有一个间距已经变为0,//有些while循环无法实现,只有间距不为0那个方向可以动,因此当结束时,//再次更新边界,两个为0的边界就交叉了,循环结束//         leftUpCol//leftUpRow    0//                     length    rightDownRow//                   rightDownCOl//两个移动指针int r=leftUpRow;int c=leftUpCol;//上面一条边while(c<=rightUpCol){System.out.println(matrix[leftUpRow][c++]+" ");}//恢复c=rightDownCol;r++;//右边的一条边while(r<=rightDownRow){System.out.println(matrix[r++][leftUpCol]+" ");}//恢复r=rightDownRow;c--;//下面一条边while(c>=RightDown){System.out.println(matrix[r][c--]+" ");}//恢复c=leftUpCol;r--;while(r>leftUpRow){System.out.println(matrix[r--][c]);}一圈后回到左顶角leftUpRow++;leftUpCol++;rightUpRow--;rightUpCol--;}
}

题2:0所在的行列清零

如果矩阵中某个元素为0,则将其所在行和列清零
1  2  3  4
5  6  0  8
9  0  11 12
13 14 15 16先记录再求解决
static void solve(int[][] matrix){int M=matrix.length;int N=matrix[0].length;//记录那些行出现了0int[] rowRecord=new int[M];//记录那些列出现了0int[] colRecord=new int[N];for(int i=0;i<M;i++){for(int j=0;j<N;j++){if(matrix[i][j]==0){rowRecord[i]=1;colRecord[j]=1;}}}for(int row=0;row<M;row++){for(int col=0;col<N;col++){if(rowRecord[row]==1||colRecord[col]==1)matrix[row][col]=0;}}}

题3:z型打印

1  2  3  4
5  6  7  8
9  10 11 12static void print(int[][] matrix){int r=0;m=matrix.length;//行的长度int c=0;n=matrix[0].length;//每一列的长度boolean l2r=true;//从左到右while(r<m&&c<n){//全都遍历完,才终止条件//从左下到右上的斜线,若是到边界,则这个条件结束if(12r){System.out.println(matrix[r][c]+" ");//现在在第一行,列未到边界,这是只能向左走//在上和右边界,都要调换方向,从上破转到下坡if(r==0&&c<n-1){//走上坡的终止条件,当到达最上方且未到最右方,就往右走一步l2r=!l2r;//掉换方向,从上坡到下坡c++;continue;}else if(r>0&&c=n-1){l2r=!l2r;r++;continue;}else{//急需走上坡r--;c++;}else{//走上坡结束,该走下坡了//在左和下边界,都要调换方向,从下坡上坡System.out.println(matrix[i][j]+" ");if(c==0&&r<m-1){//走下坡的边界,若是碰到l2r=!l2r;r++;continue;}else if(r==m-1){l2r=!l2r;c++;continue;}else{r++;c--;}}}}

题4:边长为1的最大子方阵

给定一个N*N的矩阵matrix,在这个矩阵中,只有0和1两种值,返回边框全是1的最大正方形的边长长度//外围循环为边长,内层循环为在该边长下,每个点位作为左上顶点,遍历四条边,看是否有0,若有0,则该方阵不成立,若没有0,则此方阵为最大子方阵
private static int solve(int[][] A){int N=A.length;int n=N;while(n>0){for(int i=0;i<N;i++){l3;if(i+n>N)break;//越界for(int j=0;j<N;j++){if(j+n>N)break;//越界//检查四个边int r=i,c=j;while(c<j+n){if(A[r][c++]==0)continue l3;}c--while(c<j+n){if(A[r++][c]==0)continue l3;}r--;while(c>=j){if(A[r][c--]==0)continue l3;}c++;while(r>=i){if(A[r--][c]==0)continue l3;}//若是都没有退出,则这就最大的边长,因为外围为边长,他是从大到小遍历的return n;}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/755230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鼠标右键增加CMD打开快捷键(亲测有效)

1. 我们用regedit或者其他注册表编辑器定位到HKEY_CLASSES_ROOT\Directory\Background\shell\处&#xff0c;右击新建项“OpenCMDHere”&#xff0c;并在该项下&#xff0c;右击新建项“command”。 2.我们在右边OpenCMDHere项下&#xff0c;右击新建REG_DWORD类型整数值。设置…

AWS监控,AWS 性能监控工具

监控云部署的性能是 IT 环境正常运行的内在条件。AWS 云是一个架构良好的框架&#xff0c;管理员可以使用专用的AWS 性能监控工具增强服务的功能。执行AWS监视是为了跟踪在AWS环境中积极运行的应用程序工作负载和资源。AWS监视器跟踪各种AWS云指标&#xff0c;以帮助提高在其上…

Elasticsearch:全文搜索的利器

1. 简介 Elasticsearch是一个基于Lucene的分布式搜索引擎&#xff0c;能够支持准实时的数据检索NRT(near real-time),支持海量数据的处理&#xff0c;包括结构化和非结构化数据&#xff0c;提供强大的全文搜索能力&#xff0c;但是ES不仅仅是一个全文搜索引擎&#xff0c;他能…

递归算法c++

主页:(*∇&#xff40;*) 咦,又好了~ xiaocr_blog 算法概述&#xff1a;递归算法是一种直接或者间接调用自身函数或者方法的算法。说简单了就是程序自身的调用。 算法实质&#xff1a;递归算法就是将原问题不断分解为规模缩小的子问题&#xff0c;然后递归调用方法来表示问题的…

【小白笔记:JetsonNano学习(二)JetsonNano 安装开机问题屏幕进不去】

重新烧录sd卡后插入Jetson Nano后出现的界面显示烧录失败&#xff0c;如下所示&#xff1a; 将经过烧录之后的sd卡插入jetson nano之后出现以下的几个界面&#xff0c;表示烧录失败。 原因分析&#xff1a;烧录的tf卡为sd卡时候的格式化的格式不对&#xff0c;新建格式出错&am…

LeetCode 222.完全二叉树的节点个数

给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干位置。若最…

Hack The Box-Analytics

目录 信息收集 namp whatweb WEB 信息收集 feroxbuster RCE漏洞 提权 get user get root 信息收集 namp 端口信息探测┌──(root㉿ru)-[~/kali/hackthebox] └─# nmap -p- 10.10.11.233 --min-rate 10000 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-…

python adb脚本

Python调用adb shell ls&#xff0c;取前5个字符存放&#xff0c;并打印出来 import subprocess def run_adb_shell_command(command):# 设置adb的路径&#xff0c;根据您的实际情况进行修改 adb_path adb # 使用subprocess运行adb shell命令&#xff0c;并捕获输出 resu…

Python面向对象——架构设计【2】

练习1&#xff1a;打电话 请使用面向对象思想描述下列情景: 小明使用手机打电话,还有可能使用座机.... class People:def __init__(self,name):self.name namedef call_up(self,tool):print(self.name,end"")tool.call()class Tools:def __init__(self,way):self.wa…

OpenCV(八)——基本线条操作

基本线条操作 OpenCV中提供了基本的线条的操作&#xff0c;包括画直线、画矩形、画圆形等。 &#xff08;1&#xff09;画直线&#xff0c;在OpenCV中利用line()画直线&#xff0c;形式为image_with_line cv2.line(image, start_point, end_point, color, thickness)。line(…

智慧矿山新趋势:大数据解决方案一览

1. 背景 随着信息技术的快速发展和矿山管理需求的日益迫切&#xff0c;智慧矿山作为一种创新的矿山管理方式应运而生。智慧矿山借助先进的信息技术&#xff0c;实现对矿山生产、管理、安全等各方面的智能化、高效化、协同化&#xff0c;是矿山行业转型升级的必然趋势。 欢迎关…

Java 容器都有哪些?

Java容器是Java编程语言中用于存储和组织对象的数据结构。在Java中&#xff0c;容器类库提供了各种类型的容器&#xff0c;每种容器都有其特定的用途和适用场景。 1. 数组&#xff08;Array&#xff09; 数组是Java中最基本的容器类型之一&#xff0c;用于存储相同数据类型的…

【LabVIEW FPGA入门】并行执行

利用图形化编程的并行特性以及 FPGA 上 LabVIEW 图的真正并行实现&#xff0c;您可以通过将应用程序代码划分为更小的进程来进一步优化执行速度。与整个应用程序在一个循环中运行相比&#xff0c;这使得每个进程能够实现更高的循环速率和更高的应用程序整体执行速率。 …

Java语法学习八之认识String类

String类的重要性 在C语言中已经涉及到字符串了&#xff0c;但是在C语言中要表示字符串只能使用字符数组或者字符指针&#xff0c;可以使用标准库提供的字符串系列函数完成大部分操作&#xff0c;但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想&#xff0c;而…

C++开发基础——函数模板

一&#xff0c;函数模板 1.基础概念 模板编程是C中泛型编程的基础。 一个模板可以是创建类或者函数的蓝图。 模板编程分两种&#xff0c;分别是算法抽象的模板、数据抽象的模板。算法抽象的模板以函数模板为主&#xff0c;数据抽象的模板以类模板为主。 基于函数模板生成的…

Vue面试题,背就完事了

1.vue的生命周期有哪些及每个生命周期做了什么? Vue.js 的生命周期可以分为以下几个核心阶段&#xff0c;每个阶段都伴随着特定的钩子函数&#xff08;生命周期钩子&#xff09;来执行相应的操作&#xff1a; 创建阶段&#xff1a; beforeCreate&#xff1a;实例被创建后、数…

13.Python从入门到精通—Python 集合操作与方法概览

13.Python从入门到精通—Python 集合操作与方法概览 Python 集合集合的基本操作1、添加元素2、移除元素3、计算集合元素个数4、清空集合5、判断元素是否在集合中存在 集合内置方法完整列表 Python 集合 在Python中&#xff0c;集合是一种无序、不重复的数据类型。集合通常用于…

MVC接收请求教程

mvc接收各种请求 1-环境搭建 1.1-准备apifox发送请求 1.2-项目搭建 ①创建Web骨架的Maven项目 ​ --打开2023-IDEA &#xff0c;选择New Project ​ --选择Maven Archetype ​ --注意点&#xff1a;Catalog默认就行了 ​ --Archetype选择webapp ​ --JDK跟着黑马敲最好…

无需借助任何三方软件,使用Windows自带分区功能实现磁盘分区!

像上面截图那样,如果当你由于文件分类或磁盘容量,想增加或减少分区盘符该怎么办。简单的理解就是怎么从E盘再分出个F盘,或者怎么从E盘分出点空间把D盘空间增大。 这里就牵扯出一个概念,磁盘分区,大概意思就是把一整个物理磁盘在系统上分出好几块区域,用来存放不同的文件…

【C++练级之路】【Lv.14】二叉搜索树(进化的二叉树——BST)

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《C语言》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、二叉搜索树介绍二、二叉搜索树的模拟实现2.1 结点2.2 成员变量2.3 默认成员函数2.3.1 constructor2.3.2…