剑指Offer(一)二维数组中的查找

来源:互联网 发布:阿里云怎么搭建vpn免流 编辑:程序博客网 时间:2024/06/05 23:53

题目描述

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

解题思路:

利用二维数组由上到下,由左到右递增的规律,那么选取右上角的元素a[row][col]与target进行比较,当target小于元素a[row][col]时,那么target必定在元素a所在行的左边,即col–;当target大于元素a[row][col]时,那么target必定在元素a所在列的下边,即row++;

public class Solution {    public static boolean Find(int target, int [][] array) {        if(array==null || array.length<1 || array[0].length<1){//确保输入的是二维数组            return false;        }        int rows=array.length;//数组行数        int cols=array[0].length;//数组列数        int row=0;//起始右上角元素的行数        int col=cols-1;//起始右上角元素的列数        while(row>=0 && row<rows && col>=0 && col<cols){            if(array[row][col]==target){//右上角元素等于target                return true;            }            else if(array[row][col]>=target){//target小于右上角元素                col--;//左移一列,列数减一            }            else{//target大于右上角元素                row++;//下移一行,行数加一            }        }        return false;    }    public static void main(String[] args){        int[][] array={            {1,3,7,10},            {2,4,8,11},            {5,6,9,12},            {7,9,13,15}        };        //测试        System.out.println(Find(7,array));        System.out.println(Find(0,array));        System.out.println(Find(3,array));        System.out.println(Find(14,array));        System.out.println(Find(7,null));    }   }
原创粉丝点击