题目
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
数据范围 二维数组中元素个数范围 [0,1000][0,1000] 样例 输入数组:
[ [1,2,8,9], [2,4,9,12], [4,7,10,13], [6,8,11,15] ]
如果输入查找数值为7,则返回true,
如果输入查找数值为5,则返回false。
解析
从二维数组最右上角的数字开始遍历,如果遍历到的数大于目标值,列值-1;如果遍历到的数小于目标值,行值+1;遍历到数等于目标值就直接返回True。若二维数据为空/某行为空就直接返回false
代码
C++
class Solution {
public:
bool searchArray(vector<vector<int>> array, int target) {
if (array.size() == 0 || array[0].size() == 0)
return false;
int i = 0, j = array[0].size() - 1;
while (i < array.size() && j >= 0) {
if (array[i][j] > target)
j -- ;
else if (array[i][j] < target)
i ++ ;
else
return true;
}
return false;
}
};
Python
class Solution(object):
def searchArray(self, array, target):
"""
:type array: List[List[int]]
:type target: int
:rtype: bool
"""
if len(array) == 0 or len(array[0]) == 0:
return False
i, j = 0, len(array[0]) - 1
while i < len(array) and j >= 0:
x = array[i][j]
if x > target:
j -= 1
elif x < target:
i += 1
else:
return True
return False
GO
func searchArray(array [][]int, target int) bool {
if (len(array) == 0) || (len(array[0]) == 0) {
return false
}
i, j := 0, len(array[0]) - 1
for i < len(array) && j >= 0 {
x := array[i][j]
if x == target {
return true
} else if x < target {
i ++
} else {
j --
}
}
return false
}