剑指Offer二维数组

题目描述

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

 

import java.util.*;
public class Solution {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();
int b=sc.nextInt();
int[][] arr=new int[a][b];
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
arr[i][j]=sc.nextInt();
}

}
int target=sc.nextInt();
boolean result= Find (target, arr);
System.out.println(result);

}
public static boolean Find(int target, int[][] array) {

/*
* 行数:array.length
* 列数:array[0].length
*/
if(target<=array[array.length-1][array[0].length-1]&&target>=array[0][0]){
boolean flag=false;
for(int i=0;i<array.length;i++)
{
for(int j=0;j<array[0].length;j++)
{
if(target==array[i][j])
{
flag= true;
break;
}
}
if(flag)
{
break;
}
}
return flag;
}
else return false;

}
}

 

//正确的

public class Solution {
public boolean Find(int target,int [][] array) {
int m = array.length;
int n = array[0].length;

if(m == 0 || n == 0) {
return false;
}

if(target < array[0][0] || target > array[m - 1][n - 1]) {
return false;
}

int i = 0;
int j = n - 1;

while(i < m && j >= 0) {
if(target < array[i][j]) {
j--;
} else if(target > array[i][j]) {
i++;
} else {
return true;
}
}
return false;
    }
}

posted @ 2017-07-18 09:42  code666  阅读(144)  评论(0编辑  收藏  举报