题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:类似于二叉树搜索,从右上角开始依次左、下遍历,或者从左下角开始依次右上遍历。
C/C++ 运行时间:12ms 占用内存:1380k
class Solution
{
public:
bool Find(int target, vector<vector<int> > array)
{
if(array.empty()) return false;
int m = array.size();
int n = array[0].size();
for(int i=0, j=n-1; i<m && j>=0; )
{
if(array[i][j]==target) return true;
else if(array[i][j]<target) ++i;
else --j;
}
return false;
}
};
Java 运行时间:219ms 占用内存:16716k
public class Solution
{
public boolean Find(int target, int [][] array)
{
int m = array.length; //行数
int n = array[0].length; //列数
for(int i=0, j=n-1; i<m && j>=0; )
{
if(array[i][j]==target) return true;
else if(array[i][j]<target) ++i;
else --j;
}
return false;
}
}
Python 运行时间:348ms 占用内存:5852k
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
m, n = len(array), len(array[0])
i=0
j=n-1
while i<m and j>=0:
if array[i][j]==target:
return True
elif array[i][j]<target:
i += 1
else:
j -= 1
return False
JavaScript 运行时间:51ms 占用内存:7964k
function Find(target, array)
{
// write code here
var m = array[0].length - 1; //line - 1
var n = array.length - 1; //row - 1
var upp = 0;
while(m>=0 && upp<=n)
{
if(array[upp][m]==target)
return true;
else if(array[upp][m]>target)
m--;
else upp++;
}
return false;
}