题解 | #矩阵元素查找#

矩阵元素查找

http://www.nowcoder.com/practice/3afe6fabdb2c46ed98f06cfd9a20f2ce

思路

  • 暴力搜索,双重循环遍历
  • 依据有序性按照一定顺序来查找

方法一:暴力搜索

双重循环直接遍历所有元素找到指定元素

class Solution {
public:
    vector<int> findElement(vector<vector<int> > mat, int n, int m, int x) {
        // write code here
        for(int i = 0; i < n; i++) {                // 遍历行
            for(int j = 0; j < m; j++) {            // 遍历列
                if(mat[i][j] == x) return {i,j};    // 如果找到相等的元素则返回坐标
            }
        }
        return {};
    }
};

复杂度分析

  • 时间复杂度:O(n^2),双重循环的时间
  • 空间复杂度:O(1),未引入任何其他空间消耗

方法二:按序搜索(二分的思路)

由于二维数组是有序的,我们只需要选择起点为左下角处,从这里出发,向右的数字都比当前大,向上的数字都比当前小,因此实现了一个单右方向和单上方向的寻找路线,大大节省了时间代价
图片说明

class Solution {
public:
    vector<int> findElement(vector<vector<int> > mat, int n, int m, int x) {
        // write code here
        for(int i = n-1, j = 0; i>=0 && j < m;) {        // 构造起点
            if(mat[i][j] == x) return {i,j};             // 如果找到目标值则返回坐标
            if(mat[i][j] > x) i--;                       // 如果当前值大于目标值则向上单向寻找
            if(mat[i][j] < x) j++;                       // 如果当前值小于目标值则向右单向寻找
        }
        return {};
    }
};

复杂度分析

  • 时间复杂度:O(M+N),最长的查找时间也是扫过一长一宽的时间
  • 空间复杂度:O(1),不需要无额外空间申请
不会做题写的题解 文章被收录于专栏

哎呀我好笨呀,一不小心又不会了一道题

全部评论

相关推荐

HOYI20190707232741:你好 我刚找到字节的暑期实习,可以提供一些建议 1. 生日等求职无关的消息可以去掉 2. 获奖等信息放在第一位,并且标注日期 3. 技术栈可以写,但是要加粗相关技术,不然一眼看过去抓不到重点 4. 最好不要写熟练(真的熟练当我没说),可以写熟悉、了解,不然很可能会被面试官追着问 5. 不了解或者没怎么用过的技术,不要写上去简历,也可能会被追着问 6. 字太多,看着有点紧凑,可以优化一下排版 7. 可以多做一个青训营项目或者比赛,丰富经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务