题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
九度:http://ac.jobdu.com/problem.php?pid=1384
时间复杂度 0(m + n)
package com.offer.chapter_2;
import java.util.Scanner;
public class Interviews_3 {
public static boolean findMap(int[][] map, int m ,int n, int x) {
int i = 0;
int j = n - 1;
while(i < m && j >= 0) {
if(map[i][j] > x) {
j --;
} else if(map[i][j] < x) {
i ++;
} else {
return true;
}
}
return false;
}
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
int m, n, x;
int map[][];
while(scanner.hasNext()) {
m = scanner.nextInt();
n = scanner.nextInt();
x = scanner.nextInt();
map = new int[m][n];
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
map[i][j] = scanner.nextInt();
}
}
boolean flag;
if(x > map[m-1][n-1] || x < map[0][0]) {
flag = false;
} else if(x == map[m-1][n-1] || x == map[0][0]) {
flag = true;
} else {
flag = findMap(map, m, n, x);
}
if(flag == true) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}
}