leetcode-Maximal Square
2015-12-12 10:41
260 查看
这里本来要申请一个动态的二维数组的 可是没有想出怎么申请一个动态的二维数组 就申请了一个一伟数组当二维数组用了
dp[i][j] 代表以i j为右下角的最大面积的正方形的边长
if(matrix[i][j]==’1’)dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1
else dp[i][j]=0;
下面是提交的代码
#include <vector> #include <iostream> #include <algorithm> using namespace std; /* dp[i*ml+j] 代表以i,j为右下角的正方形的最大边长 */ class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { int temp; xlength = matrix.size(); if (xlength != 0) { ylength = matrix[0].size(); dp = new int[xlength*ylength]; for (int i = 0; i < xlength; i++) { if (matrix[i][0] == '1') valueIs(i, 0, 1); else valueIs(i, 0, 0); } for (int i = 0; i < ylength; i++) { if (matrix[0][i] == '1') valueIs(0, i, 1); else valueIs(0, i, 0); } for (int i = 1; i < xlength; i++) for (int j = 1; j < ylength; j++) { if (matrix[i][j] == '1') temp = minOfThree(valueAt(i - 1, j - 1), valueAt(i - 1, j), valueAt(i, j - 1)) + 1; else temp = 0; valueIs(i, j, temp); } } int max = 0; for (int i = 0; i < xlength; i++) for (int j = 0; j < ylength; j++) { if (max < valueAt(i, j)) max = valueAt(i, j); } temp = max*max; return temp; } ~Solution() { delete[]dp; } private: int minOfTwo(int x, int y) { return min(x, y); } int minOfThree(int x, int y, int w) { int temp = min(x, y); return min(temp, w); } void valueIs(int i, int j,int value) { dp[i*ylength + j] = value; } int valueAt(int i, int j) { if (i <= xlength-1 && j <= ylength-1) return dp[i*ylength + j]; else return -1; } int *dp; int xlength; int ylength; };
下面是自己测试的代码
int main()
{
int xlength, ylength;
int temp;
vector
相关文章推荐
- MUI之父页面刷新
- Ubuntu 制作U盘启动盘
- 如何在Sql Server中读取最近一段时间的记录,比如取最近3天的或最近3个月的记录。
- 多项式逼近remes算法
- 【Unity3d】【项目学习心得】从资源服务器下载资源(三)
- 【Unity3d】【项目学习心得】从资源服务器下载资源(二)
- LeetCode 257 Binary Tree Paths
- UISearchController进行网络实时搜索
- 关联容器(五):unordered_map
- 前端开发面试总结前言
- 【Unity3d】【项目学习心得】从资源服务器下载资源(一)
- php 删除一维数组中某一个值元素的操作
- 最新cocoapods安装教程
- nodejs-http客户端
- PLSQLDeveloper链接报错 解决办法
- 计算Sn=a+aa+aaa...前五项之和
- Opencv图像的腐蚀与膨胀总结
- 证明题练习(一)
- MySQL-python安装小问题
- ucos学习资料、论坛等