Skip to content

Commit d9c532a

Browse files
committed
dp
1 parent c340c97 commit d9c532a

6 files changed

+223
-0
lines changed

152-Maximum-Product-Subarray.c

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
int maxProduct(int* nums, int numsSize) {
2+
int *pos = (int*)malloc(sizeof(int) * numsSize);
3+
int *neg = (int*)malloc(sizeof(int) * numsSize);
4+
int i;
5+
for(i = 0; i < numsSize; i++){
6+
if(0 == i){
7+
if(nums[0] > 0){
8+
pos[0] = nums[0];
9+
neg[0] = 0;
10+
}
11+
else if(nums[0] < 0){
12+
pos[0] = 0;
13+
neg[0] = nums[0];
14+
}
15+
else{
16+
pos[0] = neg[0] = 0;
17+
}
18+
}
19+
else{
20+
if(nums[i] > 0){
21+
if(pos[i - 1] > 0){
22+
pos[i] = pos[i - 1] * nums[i];
23+
}
24+
else{
25+
pos[i] = nums[i];
26+
}
27+
neg[i] = neg[i - 1] * nums[i];
28+
}
29+
else if(nums[i] < 0){
30+
pos[i] = neg[i - 1] * nums[i];
31+
if(pos[i - 1] > 0){
32+
neg[i] = pos[i - 1] * nums[i];
33+
}
34+
else{
35+
neg[i] = nums[i];
36+
}
37+
}
38+
else{
39+
pos[i] = neg[i] = 0;
40+
}
41+
}
42+
}
43+
int max = nums[0];
44+
for(i = 1; i < numsSize; i++){
45+
if(max < pos[i]){
46+
max = pos[i];
47+
}
48+
}
49+
return max;
50+
}

221-Maximal-Square.c

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#define MIN(a, b) ((a) < (b) ? (a) : (b))
2+
int maximalSquare(char** matrix, int matrixRowSize, int matrixColSize) {
3+
int **l = (int**)malloc(sizeof(int*) * matrixRowSize);
4+
int i, j, max = 0;
5+
for(i = 0; i < matrixRowSize; i++){
6+
l[i] = (int*)malloc(sizeof(int) * matrixColSize);
7+
}
8+
for(i = 0; i < matrixRowSize; i++){
9+
if(matrix[i][0] == '0'){
10+
l[i][0] = 0;
11+
}
12+
else{
13+
l[i][0] = 1;
14+
max = 1;
15+
}
16+
}
17+
for(i = 0; i < matrixColSize; i++){
18+
if(matrix[0][i] == '0'){
19+
l[0][i] = 0;
20+
}
21+
else{
22+
l[0][i] = 1;
23+
max = 1;
24+
}
25+
}
26+
for(i = 1; i < matrixRowSize; i++){
27+
for(j = 1; j < matrixColSize; j++){
28+
if('0' != matrix[i][j]){
29+
l[i][j] = MIN(MIN(l[i - 1][j], l[i - 1][j - 1]), l[i][j - 1]) + 1;
30+
}
31+
else{
32+
l[i][j] = 0;
33+
}
34+
if(l[i][j] > max){
35+
max = l[i][j];
36+
}
37+
}
38+
}
39+
return max * max;
40+
}

264-Ugly-Number-II.c

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
int nthUglyNumber(int n) {
2+
int *dp = (int*)malloc(sizeof(int) * n);
3+
int min, i, j;
4+
if(n < 7){
5+
return n;
6+
}
7+
for(i = 0; i < 6; i++){
8+
dp[i] = i + 1;
9+
}
10+
for(i = 6; i < n; i++){
11+
min = 2147483647;
12+
for(j = i - 2; j >= 0; j--){
13+
if(dp[j] * 2 > 0){
14+
if(dp[j] * 2 > dp[i - 1]){
15+
if(dp[j] * 2 < min){
16+
min = dp[j] * 2;
17+
}
18+
}
19+
else if(dp[j] * 3 > 0){
20+
if(dp[j] * 3 > dp[i - 1]){
21+
if(dp[j] * 3 < min){
22+
min = dp[j] * 3;
23+
}
24+
}
25+
else if(dp[j] * 5 > 0){
26+
if(dp[j] * 5 > dp[i - 1]){
27+
if(dp[j] * 5 < min){
28+
min = dp[j] * 5;
29+
}
30+
}
31+
else{
32+
break;
33+
}
34+
}
35+
}
36+
}
37+
}
38+
dp[i] = min;
39+
}
40+
return dp[i - 1];
41+
}

279-Perfect-Squares.c

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
int numSquares(int n) {
2+
int *dp = (int*)malloc(sizeof(int) * (n + 1));
3+
int i, j, min;
4+
for(i = 1; i <= n; i++){
5+
dp[i] = 0;
6+
}
7+
for(i = 1; i * i <= n; i++){
8+
dp[i * i] = 1;
9+
}
10+
for(i = 1; i <= n; i++){
11+
if(0 == dp[i]){
12+
min = 2147483647;
13+
for(j = 1; j * j <= i; j++){
14+
if(dp[i - j * j] + 1 < min){
15+
min = dp[i - j * j] + 1;
16+
}
17+
}
18+
dp[i] = min;
19+
}
20+
}
21+
return dp[i - 1];
22+
}

300-Longest-Increasing-Subsequence.c

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
int lengthOfLIS(int* nums, int numsSize) {
2+
int *dp = (int*)malloc(sizeof(int) * numsSize);
3+
int i, j, max;
4+
for(i = 0; i < numsSize; i++){
5+
max = 1;
6+
for(j = 0; j < i; j++){
7+
if(nums[j] < nums[i] && dp[j] + 1 > max){
8+
max = dp[j] + 1;
9+
}
10+
}
11+
dp[i] = max;
12+
}
13+
max = dp[0];
14+
for(i = 0; i < numsSize; i++){
15+
if(max < dp[i]){
16+
max = dp[i];
17+
}
18+
}
19+
return max;
20+
}

91-Decode-Ways.c

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
int numDecodings(char* s) {
2+
int i;
3+
int length = strlen(s);
4+
int *dp = (int*)malloc(sizeof(int) * length);
5+
if(length == 0 || s[0] == '0'){
6+
return 0;
7+
}
8+
for(i = 0; i < length; i++){
9+
if(0 == i){
10+
dp[i] = 1;
11+
}
12+
else if(1 == i){
13+
if(s[1] != '0'){
14+
if(s[0] == '1' || s[0] == '2' && s[1] < '7'){
15+
dp[i] = 2;
16+
}
17+
else{
18+
dp[i] = 1;
19+
}
20+
}
21+
else{
22+
if(s[0] < '3' && s[0] > '0'){
23+
dp[i] = 1;
24+
}
25+
else{
26+
return 0;
27+
}
28+
}
29+
}
30+
else{
31+
if(s[i] != '0'){
32+
if(s[i - 1] == '1' || s[i - 1] == '2' && s[i] < '7'){
33+
dp[i] = dp[i - 1] + dp[i - 2];
34+
}
35+
else{
36+
dp[i] = dp[i - 1];
37+
}
38+
}
39+
else{
40+
if(s[i - 1] < '3' && s[i - 1] > '0'){
41+
dp[i] = dp[i - 2];
42+
}
43+
else{
44+
return 0;
45+
}
46+
}
47+
}
48+
}
49+
return dp[length - 1];
50+
}

0 commit comments

Comments
 (0)