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

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

相关文章

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

使用Python合并 Excel单元格指定行列或单元格范围

《使用Python合并Excel单元格指定行列或单元格范围》合并Excel单元格是Excel数据处理和表格设计中的一项常用操作,本文将介绍如何通过Python合并Excel中的指定行列或单... 目录python Excel库安装Python合并Excel 中的指定行Python合并Excel 中的指定列P

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

MYSQL行列转置方式

《MYSQL行列转置方式》本文介绍了如何使用MySQL和Navicat进行列转行操作,首先,创建了一个名为`grade`的表,并插入多条数据,然后,通过修改查询SQL语句,使用`CASE`和`IF`函... 目录mysql行列转置开始列转行之前的准备下面开始步入正题总结MYSQL行列转置环境准备:mysq

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量