题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
题目来源: 牛客网
思路:
- 暴力搜索, 直接遍历二维数组.
- 题目中告诉了每个一维数组长度相同,
每一行从左到右递增
每一列从上往下递增
根据这个规则, 我们可以不用暴搜, 二维数组可以看作一个矩阵.
因此我们可以从二维数组左下角开始进行搜索, 与查找整数进行比较.
如果大于查找值, 就往上走; 如果小于查找值, 就往右走.
代码示例:
-
暴力搜索
class Solution { public: bool Find(int target, vector<vector<int> > array) { int len = array[0].size(); for (auto & i : array) { for (int j = 0; j < len; ++j) { if (i[j] == target) { return true; } } } return false; } };
-
从二维数组左下角出发寻找
class Solution { public: bool Find(int target, vector<vector<int> > array) { int col = array[0].size(); int row = array.size(); for (int i = row - 1; i >= 0; --i) { for (int j = 0; j < col; ++j) { if (array[i][j] > target) { break; } else if (array[i][j] < target) { continue; } else { return true; } } } return false; } };