华为机试题---二维数组的转置
来源:互联网 发布:淘宝部分退款返利 编辑:程序博客网 时间:2024/05/16 08:44
一、问题描述
* 二维数组转置 例:
1 2 3
4 5 6
转置
* 1 4
* 2 5
* 3 6
二、算法分析
解决两个问题: 1. 如何初始化新的数据,如何获得转置后二维数组的行数;
2. 如何把原先数组的数据转移到新的数据中。
笔者是这么解决以上两个问题:
1. 初始化一个Integer[]一维数组,用来存放每一行的数据。
2.然后把integer数组存放到List中,由于list存放进去的次序不发生变化。那么List.get(0)[0] = arry[0][0]
3.根据list中存放integer数组的长度来初始化新的数据行数和列数。
4. 把list中的数据转移到新的数据中。
三、具体算法
/** * Gets reversed matrix * @param a * @return */public int[][] reverseArray(int[][] a) {Integer[] rowCell = null;List<Integer[]> cellList = new ArrayList<Integer[]>();for (int i = 0; i < a.length; i++) {rowCell = new Integer[a[i].length];for (int j = 0; j < a[i].length; j++) {rowCell[j] = a[i][j];}cellList.add(rowCell);}int[][] result = new int[cellList.get(0).length][a.length];for (int i = 0; i < result.length; i++) {for (int j = 0; j < result[i].length; j++) {result[i][j] = cellList.get(j)[i];}}return result;}四、测试类:
package com.albertshao.csi.interview;import java.util.ArrayList;import java.util.List;/** * @author albertshao * */public class Main26 {/** * @param args */public static void main(String[] args) {Main26 m = new Main26();int[][] a = {{ 1, 2, 3 }, { 4, 5, 6 },{7,8,9} };int[][] result = m.reverseArray(a);m.print(result);}/** * Gets reversed matrix * @param a * @return */public int[][] reverseArray(int[][] a) {Integer[] rowCell = null;List<Integer[]> cellList = new ArrayList<Integer[]>();for (int i = 0; i < a.length; i++) {rowCell = new Integer[a[i].length];for (int j = 0; j < a[i].length; j++) {rowCell[j] = a[i][j];}cellList.add(rowCell);}int[][] result = new int[cellList.get(0).length][a.length];for (int i = 0; i < result.length; i++) {for (int j = 0; j < result[i].length; j++) {result[i][j] = cellList.get(j)[i];}}return result;}public void print(int[][] result) {for (int i[] : result) {for (int e: i) {System.out.print(e + " ");}System.out.println();}}/** * 实现二维数组的转置 * @author HAN * */final static double PI=3.1415;public static void vast() {/*****定义要用于转置的二维数组*******/int arr2D[][]={{1,2,3},{4,5,6},{7,8,9}};/*****构造结果新二维数组用于存放转置结果*******//*定义结果数组变量,注意 一定要先开辟一个内存,否则只是地址传递,也就是说两个数组名实际上指向的是同一块内存*///而构造二维数组可以为维度来进行,不一定是一个矩阵,即每一行的长度不一定相同int result_arr[][]=new int[arr2D.length][];//先实现第一维for(int i=0 ; i<arr2D.length;i++){ //再实现第二维result_arr[i]=new int[arr2D[i].length];}/*****输出用于转置的二维数组*******/for (int x[]:arr2D){ for(int e:x){ System.out.print(e+" "); } System.out.println(); }System.out.println(); /*******进行元素倒置******/ for(int i=0 ; i<arr2D.length;i++){ for(int j=0; j<arr2D[i].length;j++){ result_arr[j][i]=arr2D[i][j]; //转置核心 } } /*****show the result in the result matrix*******/ for (int x[]:result_arr){ for(int e:x){ System.out.print(e+" "); } System.out.println(); } }}
运行结果:
1 4 7 2 5 8 3 6 9
0 0
- 华为机试题---二维数组的转置
- 华为机试题---二维数组的转置
- 华为机试题----比较二维数组列最小值,组成一个新数组返回
- 华为机试---找出二维数组各维的最小值
- [华为机试练习题]21.二维数组的列排序
- 华为机试题---数组移位
- 华为机试---二维数组打印
- 二维数组的转置
- 二维数组的转置
- 面试题 -- 有序二维数组的查找
- 面试题3:二维数组的查找
- 一道二维数组的面试题
- 面试题3-二维数组的查找
- 【面试题3】二维数组的查找
- 面试题3:二维数组的查找
- 【华为 OJ模拟】将3x3二维数组的右上半元素全部置为0
- 华为机试—二维数组列最小值
- 华为机试:二维数组操作、公共字串计算
- C#的反射中使用带参的构造函数进行构建对象
- UML--UML类图几种关系的总结
- Android自学笔记-9-Pull方式处理XML
- 【黑马程序员】C语言学习笔记之变量与内存(五)
- 2014年3月份c++复习总结
- 华为机试题---二维数组的转置
- XP 怎样建立宽带连接
- eclipse中用maven需要注意JDK的配置
- ADO.NET
- 面向对象核心思想和概念
- 编程菜鸟的技术博客
- Medoo Quote的使用:转义字符串
- hdu 1398 Square Coins(简单背包)
- 开放源码 C/C++ 单元测试工具,第 1 部分: 了解 Boost 单元测试框架