剑指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;
}
}