PS:此博客仅为个人学习记录,如有错误之处欢迎批评指出。
知识点:数组
一、题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二、解题思路:
三、代码实现:
C++:
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
//1、计算行、列,判断是否为空空数组
int rows = array.size();
int cols = array[0].size();
if(rows == 0 || cols ==0){
return false;
}
//2、如果target小于数组中的最小值,或大于最大值,则必不包含在数组中
if(target < array[0][0] || target > array[rows-1][cols-1]){
return false;
}
//3、b从数组右上角元素开始,遍历数组行、列。遍历规则:
//如果target大于该元素,则行数加1;如果target小于该元素,列数减1;相等则返回true。
int i = 0, j = cols - 1;
while(i < rows && j >= 0 ){
if(target > array[i][j]){
i++;
}else if(target < array[i][j]){
j--;
}else{
return true;
}
}
//4、遍历完数组中的每个元素还没有找到,则false
return false;
}
};
python2.7:
# -*- coding:utf-8 -*-
class Solution:
# array 二维列表
def Find(self, target, array):
#1、
rows = len(array)
cols = len(array[0])
if rows == 0 or cols == 0:
return False
#2、
if target < array[0][0] or target > array[rows-1][cols-1]:
return False
#3、
i,j = 0,cols-1
while i < rows and j >= 0:
if target > array[i][j]:
i += 1
elif target < array[i][j]:
j -= 1
else:
return True
#4、
return False