【LeetCode剑指offer04】二维数组中的查找(简单数学)
【摘要】
一、题目
二、思路
从左到右,从上到下,两条路径都是数值从小到大排列,为了确定target是否存在,可以换个起点开始,如从右上角(其实从左下角开始也行),这时候就很神奇了:
如果当前值比targ...
一、题目
二、思路
从左到右,从上到下,两条路径都是数值从小到大排列,为了确定target
是否存在,可以换个起点开始,如从右上角(其实从左下角开始也行),这时候就很神奇了:
- 如果当前值比
target
大,就不能继续往下走(只会越来越大),而往左边走,值会变小,进一步靠近可能的target
; - 如果当前值比
target
小,就不能往左边走了(只会越来越小),而往下面走,值会变大,进一步靠近可能的target
。
另外注意细节,一开始判断matrix
二维数组是否为空,如果为空则matrix.size() == 0
,而此时还matrix[0].size()
取列数是会报错越界的,所以不要先取行数列数再判空。
三、代码
class Solution {
public:
bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) {
if(matrix.size() == 0 || matrix[0].size() == 0) return false;
int row = matrix.size(), col = matrix[0].size();
//设置初始点在右上角
int i = 0, j = col - 1;
while(i <= row - 1 && j >= 0){
if(matrix[i][j] == target){
return true;
}else if(matrix[i][j] > target){
//往左边走
j--;
}else{//当前值小于目标值时,不能往左边走了,否则更小
//往下走
i++;
}
}
return false;
}
};
文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。
原文链接:andyguo.blog.csdn.net/article/details/123607307
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)