博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
"Coding Interview Guide" -- 在行列都排好序的矩阵中找数
阅读量:5372 次
发布时间:2019-06-15

本文共 1840 字,大约阅读时间需要 6 分钟。

题目

  给定一个N×M的整型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的。实现一个函数,判断K是否在matrix中

    例如,   0   1   2   5

                 2   3   4   7

                 4   4   4   8

                 5   7   7   9

    如果K为7,返回true;如果K为6,返回false;

要求

  时间复杂度为O(N+M),额外空间复杂度为O(1)

 

my:

1     public boolean isContains(int[][] matrix, int k) 2     { 3         if(matrix == null || matrix.length == 0 || matrix[0].length == 0) 4         { 5             return false; 6         } 7  8         int col = matrix[0].length - 1; 9         for(int i = 0; i < matrix.length; i++)10         {11             if(matrix[i][col] >= k)12             {13                 for(int j = col; j > -1; j--)14                 {15                     if(matrix[i][j] == k)16                     {17                         return true;18                     }19                     else if(matrix[i][j] < k)20                     {21                         break;22                     }23                 }24             }25         }26         return false;27     }

 时间复杂度为O(N*M),空间复杂度为O(1),因为每一行每一列都是排好序的,所以如果遍历到某一行时发现其元素都比k大,说明k不在矩阵中,之后的所有行都不用访问了,因为当某一行的元素都比k大时,下面行的元素一定都比k大,所以如果在遍历的过程中某一行中的元素全部被遍历仍然没有找到k时,就可以判定结果了。

 

左老师:

1     public boolean isContains(int[][] matrix, int k) 2     {     3         if(matrix == null || matrix.length == 0 || matrix[0].length == 0) 4         { 5             return false; 6         } 7  8         int row = 0; 9         int col = matrix[0].length - 1;10         while(row < matrix.length && col > -1)11         {12             if(matrix[row][col] == k)13             {14                 return true;15             }16             else if(matrix[row][col] > k)17             {18                 col--;19             }20             else21             {22                 row++;23             }24         }25         return false;26     }

 时间复杂度为:O(N+M),空间复杂度为:O(1)

 

来源:左程云老师《程序员代码面试指南》

 

转载于:https://www.cnblogs.com/latup/p/10994818.html

你可能感兴趣的文章
poj 1068 Parencodings
查看>>
docker 数据卷管理
查看>>
如何让一个div的大小,从某一个特定值开始,随内容的增加而自动变化?
查看>>
P1977 出租车拼车(DP)
查看>>
iOS开发--完整项目
查看>>
我的博客园皮肤模板
查看>>
正则表达式
查看>>
java基础:不同进制的表现形式
查看>>
Base64转换为blob对象
查看>>
gulp自动化压缩合并、加版本号解决方案
查看>>
windows下面安装Python和pip教程
查看>>
Java 动态向 JTable 中添加数据
查看>>
平安科技移动开发二队技术周报(第九期)
查看>>
Oracle【二维表管理:约束】
查看>>
2017-2018-1 20155307 《信息安全系统设计基础》第5周学习总结
查看>>
微软职位内部推荐-Principal Dev Manager for Windows Phone Apps
查看>>
jquery改变元素属性值(转)
查看>>
《额尔古纳河右岸》读书笔记
查看>>
C#Virtual和Override的几种组合
查看>>
JavaScript总结之DOM基本操作(三)
查看>>