二维数组上的查找
知识点:二分法
题目链接
类似题目:
Leetcode刷题笔记 35.搜索插入位置
Leetcode刷题笔记 167. 两数之和 II - 输入有序数组
Leetcode刷题笔记 剑指 Offer 11. 旋转数组的最小数字
Leetcode刷题笔记 222. 完全二叉树的节点个数
题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
示例1:
输入:7,[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
输出:true
解题思路
- 这是一道在二维中的二分题,在原来二分法的模版上增加了维度
- 再看到按照顺序排列的顺序 我们就要想到用二分法 这里是在同一行从左到右递增 在同一列从上到下递增
- 重点:我们只需要找到 右上角的点
- 如果targtet 等于对应的值 返回ture
- 如果targtet 小于对应的值 往下找
- 如果targtet 大于对应的值 往左找
代码
#include "cheader.h"
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
int m = array.size();
if(m == 0)
return false;
int n = array[0].size();
if(n == 0)
return false;
int x = 0, y = n-1;
while(x < m && y >=0){
if(array[x][y] == target){
return true;
}
else if(array[x][y] < target)
x++;
else
y--;
}
return false;
}
};
int main()
{
Solution s;
int target = 7;
vector<vector<int>> array;
array.push_back({1,2,8,9});
array.push_back({2,4,9,12});
array.push_back({4,7,10,13});
array.push_back({6,8,11,15});
cout<<s.Find(target, array)<<endl;
return 0;
}