一、问题
NxN的数组矩阵,每一行,列均从左到右,从上之下递增。
确定一个数x是否在该矩阵内。
二、解决代码
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
/*System.out.println("请输入数字N");
int n=scanner.nextInt();
int a[][]=new int[n][n];
System.out.println("请逐行输入数据");
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
a[i][j]=scanner.nextInt();
}
}*/
int a[][]=new int[][]{
{1,2,3,4},
{3,4,5,7},
{4,5,7,9},
{6,8,9,22}
};
System.out.println("请输入你要查找的元素x");
int x=scanner.nextInt();
search(a, x);
}
private static void search(int[][] a, int k) {
int m = a.length;
int n = a[0].length;
for(int i = 0, j = n-1; j >= 0 && i < n; ){
if(a[i][j] == k){
System.out.println(true);
return;
}else if(a[i][j] < k){
i++;
}else{
j--;
}
}
System.out.println(false);
}
三、分析
因为矩阵是从左到右,从上到下递增的,从矩阵的右上角开始,而右上角是第一行的最大值,如果当前元素小于要找的数x,说明改行不可能存在x,因为每一行中,第n-1列是该行最大值,因此就到下一行(i++),如果a[i] [j]大于要找的数,则说明该数存于这一行中,进行j–操作,因为此时的a[i] [j]是该列中最小的值了,不能再向下移动了。
Patience and perseverance will get paid.