[编程题]二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
首先我们选择从左下角开始搜寻,(为什么不从左上角开始搜寻,左上角向右和向下都是递增,那么对于一个点,对于向右和向下会产生一个岔路;如果我们选择从左下脚开始搜寻的话,如果大于就向右,如果小于就向上)。
参考代码1:
public class Solution {
public boolean Find(int [][] array,int target) {
int len = array.length-1;
int i = 0;
while((len >= 0)&& (i < array[0].length)){
if(array[len][i] > target){
len--;
}else if(array[len][i] < target){
i++;
}else{
return true;
}
}
return false;
}
}
参考代码2:
#不同的思路,谁能理解?
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, array, target):
# write code here
if array == [] or array == [[]]: #注意可能存在列表行,而列是空列表
#print( False)
return False
if array[0][0] == target :
#print( True)
return True
row = len(array)
col = len(array[0])
if array[-1][-1] < target or array[0][0] > target:
#print( True)
return False
rowH = row -1
for x in range(row):
if array[x][0] > target :
rowH = x -1
break
rowL=0
for y in range(row):
if array[y][col-1] == target :
#print(True)
return True
if array[y][col-1] > target :
rowL = y
break
colH=col-1
for z in range(col):
if array[rowL][z] > target :
colH = z -1
break
colL=0
for s in range(col):
if array[rowH][s] == target :
#print(True)
return True
if array[rowH][s] > target :
colL = s
break
if rowL > rowH or colL >colH :
return False
arr = array[rowL:rowH+1]
for k in range(len(arr)):
arr[k] = arr[k][colL:colH +1]
return Solution.Find(self,arr,target)