【LeetCode剑指offer04】二维数组中的查找(简单数学)

简介: 从左到右,从上到下,两条路径都是数值从小到大排列,为了确定target是否存在,可以换个起点开始,如从右上角(其实从左下角开始也行),这时候就很神奇了

一、题目


image.png

二、思路

从左到右,从上到下,两条路径都是数值从小到大排列,为了确定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;
    }
};


相关文章
|
7月前
|
算法
【LeetCode】剑指 Offer <二刷>(2)
【LeetCode】剑指 Offer <二刷>(2)
29 0
|
8月前
|
算法 Android开发 Python
LeetCode 周赛上分之旅 #43 计算机科学本质上是数学吗?
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
36 0
LeetCode 周赛上分之旅 #43 计算机科学本质上是数学吗?
|
2天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
2天前
|
算法 定位技术
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
【leetcode】剑指 Offer II 105. 岛屿的最大面积-【深度优先DFS】
17 0
|
2天前
|
算法 测试技术 C#
【数学】LeetCode1526: 形成目标数组的子数组最少增加次数
【数学】LeetCode1526: 形成目标数组的子数组最少增加次数
|
2天前
「LeetCode」剑指 Offer 40. 最小的k个数
「LeetCode」剑指 Offer 40. 最小的k个数
30 0
|
2天前
|
算法 测试技术 C++
【数学】LeetCode1526: 形成目标数组的子数组最少增加次数
【数学】LeetCode1526: 形成目标数组的子数组最少增加次数
|
2天前
leetcode 剑指 Offer 32 - III. 从上到下打印二叉树 III
leetcode 剑指 Offer 32 - III. 从上到下打印二叉树 III
24 0
|
2天前
leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II
leetcode 剑指 Offer 32 - II. 从上到下打印二叉树 II
23 0
|
2天前
/leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
/leetcode 剑指 Offer 32 - I. 从上到下打印二叉树
22 0