现在有一个行和列都排好序的矩阵,请设计一个高效算法,快速查找矩阵中是否含有值x。
给定一个int矩阵mat,同时给定矩阵大小nxm及待查找的数x,请返回一个bool值,代表矩阵中是否存在x。所有矩阵中数字及x均为int范围内整数。保证n和m均小于等于1000。
测试样例:
[[1,2,3],[4,5,6],[7,8,9]],3,3,10
返回:false
思路:将比较的数值先和每一行的最后一个元素进行比较.1.如果该行最后一个元素大于比较的元素,则在这一行左边依次比较。
2.如果该行最后一个元素小于比较的元素,则将下一行的最后一个元素与比较的元素进行比对,然后重复第一个步骤。
3.如果在比对的过程中相等的话则返回true,否则返回false.
代码如下:
package com.paixu;
public class youxujuzhen {
public static void main(String[] args) {
int[][] mat =new int[][]{{1,2,3},{4,5,6},{7,8,9}};
System.out.println(youxujuzhen.findX(mat, 3, 3,10));
}
public static boolean findX(int[][] mat, int n, int m, int x) {
for(int i=0;i<n;i++){
for(int j=m-1;j>=0;j--){
//判断x是否等于当前行最右边的元素
if(x==mat[i][j]){
return true;
}else if(x<mat[i][j]){
//x小于当前行最右边的元素
continue;
}else{
break;
}
}
}
return false;
}
}