二维数组中查找给定整数
在一个矩阵(二维数组)中,行方向上从左至右数字升序,列方向上从上到下升序排列,给定一个整数,让你在数组中找出有没有这个整数。
思路:
由于矩阵是按一定规律进行排列的,我们只需将点定在右上角(将点限定在矩阵里)然后与目标点进行比对,如果目标点大于该点代表只能在列号大的左面(因为升序),要将该点列坐标向左移(col要减),反之目标点小于这个点代表在他的下边(行方向上升序)所以要将该点向下移(row要加),直到最后row=col找完整个矩阵
注意:要用合适的条件把点限制在矩阵中,不能越界
public static int[] findthenumber(int[][] a, int number) {
int []r=new int[2];
int rows = a.length;
int cols = a[0].length;
int row = 0;
int col = cols-1;
while(row < rows && col >=0){
if(a[row][col]==number){
r[0]=row;
r[1]=col;
return r;
}else if(a[row][col]>number){
col--;
}else {
row++;
}
}
return null;
}
测试:
public static void main(String[] args) {
int[][] a = {
{1, 2, 8, 3},
{3, 4, 9, 6},
{8, 7, 0, 11},
{100, 109, 200, 201}
};
System.out.println(Arrays.toString(findthenumber(a, 109)));
}
[3, 1]
Process finished with exit code 0
``
注意:案例一定要按指定顺序排列,否则不会有效
解法二:通俗易懂,先去矩阵底部遍历,因为底部是每一列最大的数,找到第一个大于等于target的那个数,代表该数在这一列中,然后开始遍历这一列,如果没有,代表没有这个数返回假。
class Solution {
public:
bool searchArray(vector<vector<int>> array, int target) {
if(array.size() == 0)return false;
for(int i = 0;i < array[0].size();i++){
if(array[array.size() - 1][i] >= target){
for(int j = 0; j < array.size();j++){
if(array[j][i]==target)return true;
}
return false;
}
}
return false;
}
};