Cracking the coding interview--Q9.6

题目

原文:

Given a matrix in which each row and each column is sorted, write a method to find an element in it.

译文:

给一个矩阵并且每行每列都是有序的,写一个方法找出它的一个元素。

解答

由于矩阵每行每列都是有序的,假设其递增,列出下面矩阵,观察其规律:

    1  5  9  13

    2  6  10 14

    3  7  11 15

    4  8  12 16

由于递增关系,矩阵的左上角是最小的,右下角是最大的,而对于右上角,假设所求元素为x,对比于右上角,若x小于右上角的数,则最后一列肯定大于x;若x大于右上角的数,则第一行的数肯定小于x,如此逐渐缩小范围比较……左下角的类似;代码如下:

class Q9_6{
	public static String searchMatrix(int[][] matrix,int m,int n,int num){
		int r=0;
		int c=n-1;
		while(r<m&&c>=0){
			if(matrix[r][c]==num) return "("+r+","+c+")";
			else if(matrix[r][c]<num) r++;
			else c--;
		}
		return "error";
	}

	public static void main(String[] args){
		int[][] matrix={{1,5,9,13},{2,6,10,14},{3,7,11,13},{4,8,12,16}};
		System.out.println(searchMatrix(matrix,4,4,12));

	}
}

---EOF---

你可能感兴趣的:(待优化)