二维数组中的查找
题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
package SwordOffer;
/**
* @author jinhuajian
* @data 2018年12月26日---下午10:58:20
* @blog https://me.csdn.net/qq_37119939
*/
public class Solution_01 {
public boolean Find_1(int target, int[][] array) {
if (array == null || array.length == 0) {
return false;
}
int rowL = array.length - 1, colL = array[0].length, i = 0;
while (rowL >= 0) {
while (i != colL) {
if (array[rowL][i] == target) {
return true;
} else if (array[rowL][i] < target) {
i++;
} else
break;
}
rowL--;
}
return false;
}
public boolean Find(int target, int[][] array) {
// 从右上角,如果大于则往下,如果小于则往左
// 从左下角,如果大于则往右,如果小于则往上
if (array == null || array.length == 0) {// int[][]
return false;
}
int rowL = array.length, colL = array[0].length - 1;
for (int i = 0; i != rowL; i++) {// 左上角
while (colL >= 0) {
if (target == array[i][colL]) {
return true;
} else if (target > array[i][colL]) {
break;
} else
colL--;
}
}
return false;
}
public static void main(String[] args) {
Solution_01 s = new Solution_01();
int aim = 10;
int[][] array = new int[4][4];
int c = 0;
for (int i = 0; i != array.length; i++) {// 左上角
for (int j = 0; j != array[0].length; j++) {
array[i][j] = c++;
}
}
for (int i = 0; i != array.length; i++) {// 左上角
for (int j = 0; j != array[0].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
boolean res = s.Find(aim, array);
System.out.println(res);
}
}
python版
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
m = len(array)
while(m>=0):
m-=1
for i in range(len(array[m])):
if array[m][i] > target:
break
if array[m][i] == target:
return True
return False