程序员面试金典:数组--像素翻转、清除行列

2023-12-19 21:58

本文主要是介绍程序员面试金典:数组--像素翻转、清除行列,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.像素翻转

题目描述

有一副由NxN矩阵表示的图像,这里每个像素用一个int表示,请编写一个算法,在不占用额外内存空间的情况下(即不使用缓存矩阵),将图像顺时针旋转90度。

给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于500,图像元素小于等于256。

测试样例:
[[1,2,3],[4,5,6],[7,8,9]],3
返回:[[7,4,1],[8,5,2],[9,6,3]]

解法1:

找规律
/*	* 规律:新数组纵轴等于原数组横轴,新数组横轴从第一位到第三位依次2,1,0	* 	1 2 3	-->	  7 4 1		*  4 5 6   -->   8 5 2 *  7 8 9	-->   9 6 3* */
public class Main{public static void main(String[] args) {StringBuilder sr = new StringBuilder();int arr[][]={{1,2,3},	{4,5,6},{7,8,9}};int n=3;int arrnew[][]=transformImage(arr,n);for (int i = 0; i < arrnew.length; i++) {for (int j = 0; j < arrnew.length; j++) {System.out.print(arrnew[i][j]+" ");}System.out.println();}}public static int[][] transformImage(int[][] mat, int n) {int arrNew[][]=new int[n][n];int num=n-1;for(int i=0;i<n;i++){for(int j=0;j<n;j++){arrNew[i][j]=mat[num][i];num--;}num=n-1;}return arrNew;}
}

解法2:

剥洋葱法:
/* 剥洋葱式解法:* 把矩阵想成一个洋葱,一圈包着一圈,外一圈每一条边比里一圈每一条边长度多2,* 每一条边只有边长度-1个元素需要覆盖另一条边的对应元素,因为每一条边与相邻两条边相交,* 一条边第一个元素旋转90度其实覆盖的是这一条边的最后一个元素,也是相邻边的第一个元素。* */
public class Main{public static void main(String[] args) {StringBuilder sr = new StringBuilder();int arr[][]={{1,2,3},	{4,5,6},{7,8,9}};int n=3;int arrnew[][]=transformImage(arr,n);for (int i = 0; i < arrnew.length; i++) {for (int j = 0; j < arrnew.length; j++) {System.out.print(arrnew[i][j]+" ");}System.out.println();}}public static int[][] transformImage(int[][] mat, int n) {int temp;for(int i=0;i<n/2;i++){for(int j=i;j<n-1-i;j++){temp = mat[i][j];mat[i][j]=mat[n-j-1][i];mat[n-j-1][i]=mat[n-i-1][n-j-1];mat[n-i-1][n-j-1]=mat[j][n-i-1];mat[j][n-i-1]=temp;}}return mat;}
}

2.清除行列

题目描述

请编写一个算法,若N阶方阵中某个元素为0,则将其所在的行与列清零。

给定一个N阶方阵int[][](C++中为vector<vector><int>>)mat和矩阵的阶数n,请返回完成操作后的int[][]方阵(C++中为vector<vector><int>>),保证n小于等于300,矩阵中的元素为int范围内。</int></vector></int></vector>

测试样例:
[[1,2,3],[0,1,2],[0,0,1]]
返回:[[0,0,3],[0,0,0],[0,0,0]]
import java.util.*;public class Clearer {public int[][] clearZero(int[][] mat, int n) {boolean row[]=new boolean[n];boolean col[]=new boolean[n];for(int i=0;i<mat.length;i++){for(int j=0;j<mat.length;j++){if(mat[i][j]==0){row[i]=true;col[j]=true;}}}for(int i=0;i<mat.length;i++){for(int j=0;j<mat.length;j++){if(row[i]||col[j])mat[i][j]=0;}}return mat;}
}


这篇关于程序员面试金典:数组--像素翻转、清除行列的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/513836

相关文章

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

C++原地删除有序数组重复项的N种方法

《C++原地删除有序数组重复项的N种方法》给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度,不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(... 目录一、问题二、问题分析三、算法实现四、问题变体:最多保留两次五、分析和代码实现5.1、问题分析5.

SQL Server清除日志文件ERRORLOG和删除tempdb.mdf

《SQLServer清除日志文件ERRORLOG和删除tempdb.mdf》数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法:如果可以停止SQLSe... 目录缩减 ERRORLOG 文件(停止服务后)停止 SQL Server 服务:找到错误日志文件:删除

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

C++一个数组赋值给另一个数组方式

《C++一个数组赋值给另一个数组方式》文章介绍了三种在C++中将一个数组赋值给另一个数组的方法:使用循环逐个元素赋值、使用标准库函数std::copy或std::memcpy以及使用标准库容器,每种方... 目录C++一个数组赋值给另一个数组循环遍历赋值使用标准库中的函数 std::copy 或 std::

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from