题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例 1:
输入:
array = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true
示例 2:
输入:
array= [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
输出: false
问题分析
因为二维数组是有序的,且每一行第一个是该行最小的,所以可以从左下角开始一行一行的往上找,直到找到某一行的第一个元素比目标值小,就在该行从左往右遍历,遍历完该行之前找到目标值则返回true,否则返回false
Java版本实现
public class Solution {
public boolean Find(int target, int [][] array) {
int i = array.length - 1;
int j = 0;
while(i >= 0 && j < array[0].length ){
if(array[i][j] > target)
i --;
else if(array[i][j] < target)
j ++;
else return true;
}
return false;
}
}
Python版本实现
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
if len(array) == 0:
return False
i = len(array) - 1
j = 0
while i >= 0 and j < len(array[0]):
if array[i][j] > target:
i-=1
elif array[i][j] < target:
j+=1
else:
return True
return False