本题目是《剑指offer》中的题目 二维数组中的查找
题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
step1:首先取数组中右上角的数字
step2:判断如果等于目标值,则查找过程结束
step3:如果该数字大于目标值,剔除这个数字所在的列
step4:如果该数字小于目标值,剔除这个数在所在的行
C++ code
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
bool result = false; //返回结果值,默认为false,后期找到会更改此值
if (!array.empty()){ //审核数组是否为空,不为空进入,若为空,直接返回false
int rows = array.size(); //提取二维数组的行数
int row = ; //定义行迭代变量,从0开始迭代
int col = array[].size()-; //定义列迭代变量,从末尾开始迭代
while (row < rows && col >= ){ //循环结束条件为行或者列超标
if (array[row][col] == target){ //判断相等,更改返回值,并跳出循环
result = true;
break;
}else if (array[row][col] > target){//如果大于目标值则去掉行
col -= ;
}else{ //如果小于目标值则去掉列
row += ;
}
}
}
return result;
}
};
Python Code
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
# write code here
result = False #该值后期当找到其值时候会被改变
if array: #审核边界条件
rows = len(array) #全部的行
row = 0 #迭代的行数
col = len(array[0])-1 #迭代的列数,遍历时候要减一开始
while row < rows and col >= 0: #条件是行列符合规则
if array[row][col] == target: #当找到该值时候
result = True #修改返回值,并且推出循环
break
elif array[row][col] > target:#当大于该值,去掉这一列
col -= 1
else: #当小于该值时候,去掉这一行
row += 1
return result
总结:
二维数组的遍历,自习查看该题目的特点,是有顺序的,所以要查找规律。仔细查看循环的遍历条件。