遇到的面试题:二维数组中若含有0,其横竖的值都变为0
2017-08-22 14:23
295 查看
面试遇到一个二维数组的笔试考题,我多年没用过二维数组,顿时懵逼,但是我还是想到了思路,可惜连二维数组的语法都忘了,真是万万没想到。
回来我坐在电脑面前,我想了想,还是把它写出来了,我自己也觉得比较low,但是至少实现了。留个笔记,以后可以看看,若有新的写法我也会及时更新。
考题要求:将数组中有0位置的横竖列都设置为0
变为
以下是我实现的思路:
public class Test {
public static void main(String[] args) {
int[][] num = new int[4][3]; //定义了三行三列的二维数组
num[0][0] = 1; //给第一行第一个元素赋值
num[0][1] = 0; //给第一行第二个元素赋值
num[0][2] = 9; //给第一行第三个元素赋值
num[1][0] = 4; //给第二行第一个元素赋值
num[1][1] = 5; //给第二行第二个元素赋值
num[1][2] = 6; //给第二行第三个元素赋值
num[2][0] = 7; //给第三行第一个元素赋值
num[2][1] = 8; //给第三行第二个元素赋值
num[2][2] = 0; //给第三行第三个元素赋值
num[3][0] = 7; //给第四行第一个元素赋值
num[3][1] = 8; //给第四行第二个元素赋值
nu
9778
m[3][2] = 0; //给第四行第三个元素赋值
printArray(num);
System.out.println("-------------------");
int[][] ints = changegArray(num);
System.out.println("-------------------");
printArray(ints);
}
//打印输出数组
static void printArray(int[][] aa) {
for (int i = 0; i < aa.length; i++) {
for (int j = 0; j < aa[i].length; j++) {
System.out.print(aa[i][j] + " ");
}
System.out.println();
}
}
//改变数组的方法
static int[][] changegArray(int[][] aa) {
//用来记录为0的数组位置
List<int[]> list = new ArrayList<>();
//遍历二维数组
for (int i = 0; i < aa.length; i++) {
for (int j = 0; j < aa[i].length; j++) {
//判断当前下标的数组是否为0
if (0 == aa[i][j])
//将满足要求的下标记录到list中,第一个横坐标,第二个竖坐标
list.add(new int[]{i, j});
}
}
//遍历记录坐标的list
for (int i = 0; i < list.size(); i++) {
int[] ints = list.get(i);
int i0 = ints[0];//横坐标
int i1 = ints[1];//竖坐标
//将行全部设置为0
for (int j = 0; j < aa[i0].length; j++) {
aa[i0][j] = 0;
}
//将列全部设置为0
for (int j = 0; j < aa.length; j++) {
aa[j][i1] = 0;
}
}
return aa;
}
}
回来我坐在电脑面前,我想了想,还是把它写出来了,我自己也觉得比较low,但是至少实现了。留个笔记,以后可以看看,若有新的写法我也会及时更新。
考题要求:将数组中有0位置的横竖列都设置为0
变为
以下是我实现的思路:
public class Test {
public static void main(String[] args) {
int[][] num = new int[4][3]; //定义了三行三列的二维数组
num[0][0] = 1; //给第一行第一个元素赋值
num[0][1] = 0; //给第一行第二个元素赋值
num[0][2] = 9; //给第一行第三个元素赋值
num[1][0] = 4; //给第二行第一个元素赋值
num[1][1] = 5; //给第二行第二个元素赋值
num[1][2] = 6; //给第二行第三个元素赋值
num[2][0] = 7; //给第三行第一个元素赋值
num[2][1] = 8; //给第三行第二个元素赋值
num[2][2] = 0; //给第三行第三个元素赋值
num[3][0] = 7; //给第四行第一个元素赋值
num[3][1] = 8; //给第四行第二个元素赋值
nu
9778
m[3][2] = 0; //给第四行第三个元素赋值
printArray(num);
System.out.println("-------------------");
int[][] ints = changegArray(num);
System.out.println("-------------------");
printArray(ints);
}
//打印输出数组
static void printArray(int[][] aa) {
for (int i = 0; i < aa.length; i++) {
for (int j = 0; j < aa[i].length; j++) {
System.out.print(aa[i][j] + " ");
}
System.out.println();
}
}
//改变数组的方法
static int[][] changegArray(int[][] aa) {
//用来记录为0的数组位置
List<int[]> list = new ArrayList<>();
//遍历二维数组
for (int i = 0; i < aa.length; i++) {
for (int j = 0; j < aa[i].length; j++) {
//判断当前下标的数组是否为0
if (0 == aa[i][j])
//将满足要求的下标记录到list中,第一个横坐标,第二个竖坐标
list.add(new int[]{i, j});
}
}
//遍历记录坐标的list
for (int i = 0; i < list.size(); i++) {
int[] ints = list.get(i);
int i0 = ints[0];//横坐标
int i1 = ints[1];//竖坐标
//将行全部设置为0
for (int j = 0; j < aa[i0].length; j++) {
aa[i0][j] = 0;
}
//将列全部设置为0
for (int j = 0; j < aa.length; j++) {
aa[j][i1] = 0;
}
}
return aa;
}
}
相关文章推荐
- Excel工具类--将Excel文件变为二维String数组
- Thinkphp将二维数组变为标签适用的一维数组方法总结
- 游戏公司面试题:Java如何实现二维逆时针旋转数组
- 剑指offer面试题之二维数组查找——二分查找的本质
- 面试题1:二维数组中查找
- 用递归设计一个数组排序(前俩天遇到的一个面试题)
- Thinkphp将二维数组变为标签适用的一维数组
- 面试题1:二维数组中的查找
- Java读取excel文件 将Excel文件变为二维String数组 .
- Java读取excel文件 将Excel文件变为二维String数组 .
- 查找二维排序数组中是否含有某个元素
- Thinkphp将二维数组变为标签适用的一维数组方法总结
- 九度OJ 1504 把数组排成最小的数【算法】-- 2009年百度面试题
- 面试题:找出数组中只出现一次的数字(二)
- PHP经典面试题之设计模式(经常遇到)
- POJ2155-二维树状数组-Matrix
- 面试题之2个有序数组求合并后的中位数
- 数组中第K小的数字(Google面试题)
- POJ 2155 Matrix 二维树状数组
- 网易面试题之小易是一个数论爱好者,并且对于一个数的奇数约数十分感兴趣。一天小易遇到这样一个问题: 定义函数f(x)为x最大的奇数约数,x为正整数。 例如:f(44) = 11. 现在给出一个N,需要求