阿里面试算法题-二维递增数组的查找

阿里面试算法题-二维递增数组的查找

注意:转载请说明,来自转自itboy-木小草尊重原创,尊重技术

题目:

一个n*m的二维数组,每一行从左到右依次递增,每一列从上到下依次递增。问:给你一个数字,如何能快速的输出他在数组中的位置。


    /**
     * 一个n*m的二维数组,每一行从左到右依次递增,每一列从上到下依次递增。
     * 问:给你一个数字,如何能快速的输出他在数组中的位置。
     */
    public static int[] getPos(int[][] a,int tag) {
        int len = a.length;
        int col = a[0].length;
        /*
         * 排除极端可能
         */
        if (a[0][0]>tag || a[len-1][col-1]<tag) {
            return new int[]{-1,-1};
        }
        for (int i = 0,j = col - 1; i < len && j >= 0;) {
            if (a[i][j] == tag) {
                return new int[]{i,j};
            }else if (a[i][j] < tag) {
                i++;
            }else {
                j--;
            }
        }
        return new int[]{-1,-1};
    }

    public static void main(String[] args) {
        int[][] a = new int[][]{{1,2,3},{2,3,4},{5,8,9},{7,10,11}};
        int[] result = getPos(a, 6);
        System.out.println(result[0] +","+ result[1]);
        result = getPos(a, 7);
        System.out.println(result[0] +","+ result[1]);
    }

时间复杂度:n+m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值