Leetcode Maximal Square
2015-09-16 02:32
435 查看
Leetcode Maximal Square 相关代码,本算法使用dp算法完成,主要思想为:一列列的计算,计算每个元素右上解的最大square,并记录以其为右下角的square的信息(左边’1’的长度、以及相应square大小)。计算时,使用其左边的元素的信息进行相关计算,具体如下:
如果从上到元素相邻接的 ‘1’大于左边元素为右下角的square的边长,则判断当前元素为右下角的square边长能否增长1,如果能,应该有当前square的上边,在左侧元素的上边之上,如下:
xxxxx
yyyyx
yyyyx
yyyyx
其中x代表为新增的元素,其应为1, y为左侧元素为右下角的square。
注:此处纵向x为计算ajacent,横向x为记录左侧’1’的长度。
算法复杂度为o(n^2)。
相关代码与测试如下:
如果从上到元素相邻接的 ‘1’大于左边元素为右下角的square的边长,则判断当前元素为右下角的square边长能否增长1,如果能,应该有当前square的上边,在左侧元素的上边之上,如下:
xxxxx
yyyyx
yyyyx
yyyyx
其中x代表为新增的元素,其应为1, y为左侧元素为右下角的square。
注:此处纵向x为计算ajacent,横向x为记录左侧’1’的长度。
算法复杂度为o(n^2)。
相关代码与测试如下:
#include <iostream> #include <vector> using namespace std; // conclusion: use the left rectangle and one colmun to calculate the current value class Solution { public: int maximalSquare(vector<vector<char> >& matrix) { if (matrix.size() == 0) { return 0; } if (matrix[0].size() == 0) { return 0; } int row_num = matrix.size(); int col_num = matrix[0].size(); vector<vector<int> > row(row_num, vector<int>(2, 0)); int max = 0; int ajacent = 0; for (int index = 0; index < col_num; index ++) { ajacent = 0; for (int j = 0; j < row_num; j ++) { if (matrix[j][index] == '1') { row[j][0] ++; ajacent ++; if (ajacent > row[j][1] && row[j - row[j][1]][0] >= row[j][1] + 1) { row[j][1] ++; max = row[j][1] > max? row[j][1] : max; } else { row[j][1] = ajacent > row[j][1]? row[j][1] : ajacent; } } else { row[j][0] = 0; ajacent = 0; row[j][1] = 0; } } } return max; } }; int main(int argc, char * argv[]) { Solution so; vector<vector<char> > test(3, vector<char>(5, '1')); test[0][1] = '0'; test[1][3] = '0'; test[2][0] = '0'; int re = so.maximalSquare(test); cout<<"max:"<<re<<endl; return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C++联合体转换成C#结构的实现方法
- C#实现的算24点游戏算法实例分析
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析