9
回答
华为 2012校园招聘上机编程 用java 求二维矩阵每列的最小值,用一位矩阵返回
各位大侠,我是菜菜鸟。帮我看看这个程序怎么写?

  求二维矩阵每列最小值,用一位数组返回结果;

例如:int[][]={{1,6,8},{5,3}};


返回 1 3
举报
打酱油的
发帖于7年前 9回/2K+阅
共有9个答案 最后回答: 7年前

把我的設為最佳答案行嗎?賺點積分,你也可以賺兩分。

package org.zxx;

public class ArrayDemo {
	public static void main(String[] args) {
		int a[][]={{1,6,8},{5,3}};
		int result[]=new int[a.length];
		for(int i=0;i<a.length;i++){
			int min=a[i][0];
			for(int j=0;j<a[i].length;j++){
				int otherNumber=a[i][j];
				if(min>otherNumber){
					min=otherNumber;
				}
			}
			result[i]=min;
		}
		for(int i=0;i<result.length;i++){
			System.out.println(result[i]);
		}
	}
}

--- 共有 2 条评论 ---
三掌柜有没有搞错,这是求每一行最小的数,好不好 7年前 回复
sunset535给力的代码 7年前 回复
让我情何以堪呢。。。不知道 {1,6,8}这样的可以转换list,然后Arrays.sort(...)后取第一个,但也可以冒泡嘛。。
--- 共有 5 条评论 ---
sxgkwei@喜之郎 : 不知道,不过很简单,只要第一次循环的时候Integer[]a={1,6,8};然后Arrays.asList(a);就OK了,然后就是用Collections.min获得最小的。 7年前 回复
喜之郎@sxgkwei : 封裝成list效率會不會降低呢? 7年前 回复
sxgkwei总之是,哎呀,不懂什么算法,只知道用类来套 7年前 回复
sxgkwei哎呀,那就先转换成list在用Collections.min(...)这个方法嘛 7年前 回复
喜之郎題目並沒有要求排序,先排序再找最大當然代碼簡單,但程序運行效率就低了。我寫的是效率最高的算法。 7年前 回复
int a[][]={{1,6,8},{5,3}};
    	
    	//求出最大量的列数
    	int col = 0;
		for(int i=0;i<a.length;i++){
			int temp = a[i].length;
			if(temp > col)
				col = temp;
		}
		for(int i=0;i<col;i++){
			int min = a[0][i];
			int k = 0;
			for(int j=0;j<a.length;j++){
				if(i >= a[j].length){
				//	a[j][i] = 0;
					continue;
				}
				if(min > a[j][i]){
					k = j;
					min = a[j][i];
				}
			}
			a[k][i] = a[0][i];
			a[0][i] = min;
		}
		
		
    	for(int i=0;i<a.length;i++){
			for(int j=0;j<a[i].length;j++){
				System.out.print(a[i][j]+"\t");
			}
			System.out.println();
		}

先求出最大的列数,然后便利二维数组

以列优先的方式遍历,对每一列用冒泡排序,将最小的换到第一行

返回参数可以用a[0]即第一行来返回

public class test {
	public static void main(String[] args) {
		int a[][] = { { 1, 6, 8, 9 }, 
                              { 5, 3, 7, 9 }, 
                              { 6, 2, 8, 1 } 
                            };
		int result[] = new int[a[0].length];
		result =FindMax(a);
		for (int i = 0; i < result.length; i++) {
			System.out.println(result[i]);
		}
	}

	public static int[] FindMax(int[][] array) {
		int result[] = new int[array[0].length];
		for (int i = 0; i < array[0].length; i++) {
			int min = array[0][i];
			for (int j = 1; j < array.length; j++) {
				int otherNumber = array[j][i];
				if (min > otherNumber) {
					min = otherNumber;
				}
			}
			result[i] = min;
		}
		return result;
	}
}
 

public class test5 {
	public static void main(String[] args) {
		int a[][] = { { 1, 6, 8, 9 }, { 5, 3, 7, 9 }, { 6, 2 ,8} };
		int result[]=null;
		result =FindMax(a);
		for (int i = 0; i < result.length; i++) {
			System.out.println(result[i]);
		}
	}

	public static int[] FindMax(int[][] array) {
		int minrow=0;
		for(int i=0;i<array.length-1;i++){
			minrow=array[i].length>array[i+1].length?
					array[i+1].length:array[i].length;
		}
		int result[] = new int[minrow];
		for (int i = 0; i < minrow; i++) {
			int min = array[0][i];
			for (int j = 1; j < array.length; j++) {
				int otherNumber = array[j][i];
				if (min > otherNumber) {
					min = otherNumber;
				}
			}
			result[i] = min;
		}
		return result;
	}
}

顶部