Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
寻找旋转排序数组中的最小值

153. 寻找旋转排序数组中的最小值_1.c 是完全自己写的代码

153. 寻找旋转排序数组中的最小值_2.c 是网络上找到的代码

38 changes: 38 additions & 0 deletions SugarChl/221. 最大正方形/221.最大正方形.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
int min(int a,int b)
{
if(a>b)
return b;
else
return a;
}


int maximalSquare(char** matrix, int matrixRowSize, int matrixColSize) {
int row,col;
int max=0;
int m[1000][1000];

for(row=0;row<matrixRowSize;row++)
{
for(col=0;col<matrixColSize;col++)
{
if(matrix[row][col]=='1')
m[row+1][col+1]=1;
else
m[row+1][col+1]=0;
}
}
for(row=0;row<=matrixRowSize;row++)
{
for(col=0;col<=matrixColSize;col++)
{
if(m[row][col]==1)
{
m[row][col] = min(min(m[row][col-1],m[row-1][col]),m[row-1][col-1])+1;
}
if(m[row][col]>max)
max=m[row][col];
}
}
return max*max;
}
4 changes: 4 additions & 0 deletions SugarChl/221. 最大正方形/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 解题思路

参考了网络上的答案,
使用动态规划的方法。
59 changes: 59 additions & 0 deletions SugarChl/5. 最长回文子串/5.最长回文子串.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#include<string.h>
char* longestPalindrome(char* s) {
int len = strlen(s);
int n = 2*len-1;
int i;
int max=0;
int left = 0;
int right = 0;
int L=0,R=0;
for(i=0;i<n;i++)
{
if(i%2==0)
{
int index = i/2;
L=index-1;
R=index+1;
while(L>=0&&R<len&&s[L]==s[R])
{
L--;
R++;
}
L++;
R--;
if(R-L>max)
{
max=R-L;
right=R;
left=L;
}
}
else if(i%2==1)
{
L=(i-1)/2;
R=(i+1)/2;
while(L>=0&&R<len&&s[L]==s[R])
{
L--;
R++;
}
L++;
R--;
if(R-L>max)
{
max=R-L;
right=R;
left=L;
}
}
}
char *p=malloc(1000*sizeof('x'));
int k=0;
for(i=left;i<=right;i++)
{
//printf("%c",s[i]);
p[k++]=s[i];
}
p[k]='\0';
return p;
}
4 changes: 4 additions & 0 deletions SugarChl/5. 最长回文子串/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 解题思路

参考了网络上的答案,
使用动态规划的方法。
3 changes: 3 additions & 0 deletions SugarChl/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@

153. 寻找旋转排序数组中的最小值_2.c 是网络上找到的代码

5.最长回文子串

221.最大正方形
38 changes: 38 additions & 0 deletions SugarChl/动态规划/221. 最大正方形/221.最大正方形.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
int min(int a,int b)
{
if(a>b)
return b;
else
return a;
}


int maximalSquare(char** matrix, int matrixRowSize, int matrixColSize) {
int row,col;
int max=0;
int m[1000][1000];

for(row=0;row<matrixRowSize;row++)
{
for(col=0;col<matrixColSize;col++)
{
if(matrix[row][col]=='1')
m[row+1][col+1]=1;
else
m[row+1][col+1]=0;
}
}
for(row=0;row<=matrixRowSize;row++)
{
for(col=0;col<=matrixColSize;col++)
{
if(m[row][col]==1)
{
m[row][col] = min(min(m[row][col-1],m[row-1][col]),m[row-1][col-1])+1;
}
if(m[row][col]>max)
max=m[row][col];
}
}
return max*max;
}
4 changes: 4 additions & 0 deletions SugarChl/动态规划/221. 最大正方形/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 解题思路

参考了网络上的答案,
使用动态规划的方法。
59 changes: 59 additions & 0 deletions SugarChl/动态规划/5. 最长回文子串/5.最长回文子串.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
#include<string.h>
char* longestPalindrome(char* s) {
int len = strlen(s);
int n = 2*len-1;
int i;
int max=0;
int left = 0;
int right = 0;
int L=0,R=0;
for(i=0;i<n;i++)
{
if(i%2==0)
{
int index = i/2;
L=index-1;
R=index+1;
while(L>=0&&R<len&&s[L]==s[R])
{
L--;
R++;
}
L++;
R--;
if(R-L>max)
{
max=R-L;
right=R;
left=L;
}
}
else if(i%2==1)
{
L=(i-1)/2;
R=(i+1)/2;
while(L>=0&&R<len&&s[L]==s[R])
{
L--;
R++;
}
L++;
R--;
if(R-L>max)
{
max=R-L;
right=R;
left=L;
}
}
}
char *p=malloc(1000*sizeof('x'));
int k=0;
for(i=left;i<=right;i++)
{
//printf("%c",s[i]);
p[k++]=s[i];
}
p[k]='\0';
return p;
}
4 changes: 4 additions & 0 deletions SugarChl/动态规划/5. 最长回文子串/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 解题思路

参考了网络上的答案,
使用动态规划的方法。
29 changes: 29 additions & 0 deletions SugarChl/动态规划/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# 动态规划 个人归纳

做了一些题目之后,就无法忍受暴力的方法来解题了。
针对可以使用动态规划的题目,做一些总结,请各位大佬指正~


当一个大规模问题可以被分解为小规模子问题,那么一般来说,这个问题就可以使用动态规划来求解。
要使用动态规划,那么就要构建状态转移方程。
“状态转移方程,是动态规划中本阶段的状态往往是上一阶段状态和上一阶段决策的结果”(来自百度百科)
动态规划,是要将问题分解。
那么,问题与子问题之间该怎么连接呢。
这就要构建状态转移方程。


## 221.最大正方形的问题。
>选取矩阵中的一个点。x[i][j]
>x点是否是最大正方形的右下角的点 与x[i-1][j] x[i][j-1] x[i-1][j-1]这三个点有关
>①若DP[i-1][j],DP[i][j-1],DP[i-1][j-1]三者中存在0值,则DP[i][j]一定为0;
>②若DP[i-1][j],DP[i][j-1],DP[i-1][j-1]均不为0,则DP[i][j]为三者中的最小值+1,因为三者中的最小值一定为三者所共有的不含0的部分,否则会造成缺角;

>因此对于某一点(i,j), 若matrix[i][j]=1,则动态规划表达式为DP[i][j] = min{DP[i-1][j],DP[i][j-1],DP[i-1][j-1]} + 1;

## 5.最长回文子串
>对于字符串str,假设dp[i,j]=1表示str[i...j]是回文子串
>那么dp[i+1,j-1] 也必然是回文子串
>这样最长回文子串就被分解成了一系列规模小的子问题。这样就能求解了。

>状态转移方程: dp[i,j]={dp[i+1,j-1],str[i]==str[j];0,str[i]!=str[j]}