二维数组中查找给定整数

二维数组中查找给定整数

在一个矩阵(二维数组)中,行方向上从左至右数字升序,列方向上从上到下升序排列,给定一个整数,让你在数组中找出有没有这个整数。
思路:
由于矩阵是按一定规律进行排列的,我们只需将点定在右上角(将点限定在矩阵里)然后与目标点进行比对,如果目标点大于该点代表只能在列号大的左面(因为升序),要将该点列坐标向左移(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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值