关于操作矩阵中索引的技巧(一)
来源:互联网 发布:淘宝退货要申请售后吗 编辑:程序博客网 时间:2024/06/05 02:05
一般情况下,写代码需要操作矩阵,因为有些算法题目,是要对矩阵操作的。现在就拿二维矩阵来说
Input:[[0,1,1,0], [0,1,1,0], [0,0,0,1]]Output: 3这个矩阵,想要看连续最长序列的长度,要看水平,垂直,主对角线,反对角线上,连续的1的长度。
现在主要拿主对角线,和反对角线来说:
对于主对角线,只需要检测(0,0), (1,0),(2,0),(2,0),(2,1),(2,2),(2,3)这几个位置
而一共有m+n = 7个位置需要检测(m = 3, n = 4,矩阵高度和宽度)
那么选取k = 0, 1, 2, 3, 4, 5, 6 (k = 0, k < n+m)
然后可以看到,第一个做表取值为:0,1,2,2,2,2,2,第二个做表取值为:0,0,0,0,1,2,3
那么接下来要做的,就是操作k,以及m,n来是的,操作结果是以上两个序列:
首先想到,采用max(k, m-1)来获取该序列,而对于第二个序列,max(0, k-m)这样便得到了相应的矩阵下表操作结果,之后,只需要带入for循环中,便可以对矩阵进行操作。
同理,低于反对角线,也可以这么操作,只需要检测(2,0),(1,0),(0,0),(0,0),(0,1),(0,2),(0,3)这几个位置
按照上面的分析技巧,可以得到 i = max(0, m-k-1), j = max(0, k-m)
class Solution3 {
public:
int longestLine(vector<vector<int>>& M) {
if (M.empty()) return 0;
int m = M.size(), n = M[0].size();
int max_ = 0;
int horical = 0;
for (int i = 0; i < m; i++)
{
for (int j = 0, horical = 0; j < n; j++)
{
horical = M[i][j] ? horical + 1 : 0;
max_ = max(max_, horical);
}
}
int vertical = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0, vertical = 0; j < m; j++)
{
vertical = M[j][i] ? vertical + 1 : 0;
max_ = max(max_, vertical);
}
}
int diagonal = 0, anti_diagonal = 0;
for (int k = 0; k < m + n; k++)
{
for (int i = min(k, m - 1), j = max(0, k - m), diagonal = 0; i >= 0 && j < n; i--, j++)
{
diagonal = M[i][j] ? diagonal + 1 : 0;
max_ = max(max_, diagonal);
}
for (int i = max(k - m - 1, 0), j = max(0, k - m), anti_diagonal = 0; i < m && j < n; i++, j++)
{
anti_diagonal = M[i][j] ? anti_diagonal + 1 : 0;
max_ = max(max_, anti_diagonal);
}
}
return max_;
}
};
- 关于操作矩阵中索引的技巧(一)
- 关于操作矩阵中索引的技巧(二)
- XMind中关于“大图”的操作技巧(一)
- XMind中关于“大图”的操作技巧(二)
- 关于索引的使用技巧
- 关于索引的理解(一)
- opencv关于矩阵的操作
- Delphi中关于Rtti的一些操作(一)
- matlab中矩阵的简单操作 --- 创建,索引,重排,转置,拆分,删除,扩转,压缩
- 关于矩阵的一些操作(求转置矩阵、行列式、矩阵的秩、矩阵的逆矩阵、两个矩阵的乘积矩阵)
- 关于矩阵的一些操作(求转置矩阵、行列式、矩阵的秩、矩阵的逆矩阵、两个矩阵的乘积矩阵)
- MATLAB中矩阵的逻辑索引方法
- .net中,关于gridview的一些简单技巧操作
- 关于DB2索引(一)
- Matlab中对矩阵使用矩阵尺寸的索引
- matlab中矩阵的操作
- MySQL中索引的操作
- mysql中索引的操作
- 网络基础知识
- 查看被进程占用的端口
- 4.29
- WebService到底是什么?
- 使用jmap dump 分析JVM内存状态
- 关于操作矩阵中索引的技巧(一)
- CentOS7上对文件,目录和分区实现磁盘配额
- 面向对象实验3-分析类
- 四个数最大值
- 【数据结构】栈的应用---四则运算表达式求值(中缀表达式与后缀表达式转换)
- DBUtils学习
- AngularJS总结
- selenium:expected [object undefined] undefined to be a string
- Java重写和重载的区别