Skip to content

Commit 40cb242

Browse files
committed
Add 18/132 solutions.
1 parent 22d80e4 commit 40cb242

20 files changed

+649
-0
lines changed

Best_Time_to_Buy_and_Sell_Stock.cc

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int maxProfit(vector<int> &prices) {
4+
// Start typing your C/C++ solution below
5+
// DO NOT write int main() function
6+
if (prices.size() == 0)
7+
return 0;
8+
int cnt = prices[0];
9+
int ans = -0x7ffffff;
10+
for (int i = 0; i < prices.size(); i++) {
11+
ans = max(ans, prices[i] - cnt);
12+
cnt = min(cnt, prices[i]);
13+
}
14+
return ans;
15+
}
16+
};
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public:
3+
int maxProfit(vector<int> &prices) {
4+
// Start typing your C/C++ solution below
5+
// DO NOT write int main() function
6+
if (prices.size() == 0)
7+
return 0;
8+
int ans = 0;
9+
for (int i = 1; i < prices.size(); i++)
10+
if (prices[i] > prices[i - 1])
11+
ans += (prices[i] - prices[i - 1]);
12+
return ans;
13+
}
14+
};
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public:
3+
int maxProfit(vector<int> &prices) {
4+
// Start typing your C/C++ solution below
5+
// DO NOT write int main() function
6+
if (prices.size() == 0)
7+
return 0;
8+
int cnt = prices[0];
9+
vector<int> ans1, ans2;
10+
int ans = 0;
11+
for (int i = 0; i < prices.size(); i++) {
12+
ans1.push_back(prices[i] - cnt);
13+
ans2.push_back(0);
14+
cnt = min(prices[i], cnt);
15+
}
16+
cnt = prices[prices.size() - 1];
17+
for (int i = prices.size() - 1; i >= 0; i--) {
18+
ans2[i] = cnt - prices[i];
19+
cnt = max(cnt, prices[i]);
20+
}
21+
for (int i = 1; i < prices.size(); i++) {
22+
ans1[i] = max(ans1[i], ans1[i - 1]);
23+
ans2[prices.size() - i - 1] = max(ans2[prices.size() - i - 1], ans2[prices.size() - i]);
24+
}
25+
for (int i = 0; i < prices.size(); i++)
26+
ans = max(ans, ans1[i] + ans2[i]);
27+
return ans;
28+
}
29+
};

Binary_Tree_Maximum_Path_Sum.cc

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* Definition for binary tree
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
int dfs (TreeNode *rt, int &ans) {
13+
ans = max(ans, rt->val);
14+
if (rt->left == NULL && rt->right == NULL)
15+
return rt->val;
16+
if (rt->left != NULL && rt->right == NULL) {
17+
int tmp = rt->val + dfs(rt->left, ans);
18+
ans = max(ans, tmp);
19+
return max(rt->val, tmp);
20+
}
21+
if (rt->left == NULL && rt->right != NULL) {
22+
int tmp = rt->val + dfs(rt->right, ans);
23+
ans = max(ans, tmp);
24+
return max(rt->val, tmp);
25+
}
26+
int tmp1 = dfs(rt->left, ans);
27+
int tmp2 = dfs(rt->right, ans);
28+
ans = max(ans, rt->val + max(tmp1, tmp2));
29+
ans = max(ans, rt->val + tmp1 + tmp2);
30+
return max(rt->val, rt->val + max(tmp1, tmp2));
31+
}
32+
int maxPathSum(TreeNode *root) {
33+
// Start typing your C/C++ solution below
34+
// DO NOT write int main() function
35+
int ans = -0x7ffffff;
36+
dfs(root, ans);
37+
return ans;
38+
}
39+
};

Distinct_Subsequences.cc

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
class Solution {
2+
public:
3+
int numDistinct(string S, string T) {
4+
// Start typing your C/C++ solution below
5+
// DO NOT write int main() function
6+
int slen = S.length();
7+
int tlen = T.length();
8+
if (slen == 0 || tlen == 0)
9+
return 0;
10+
vector<vector<int>> dp;
11+
vector<int> tmp;
12+
for (int i = 0; i < tlen; i++)
13+
tmp.push_back(0);
14+
for (int i = 0; i < slen; i++)
15+
dp.push_back(tmp);
16+
for (int i = 0; i < slen; i++)
17+
for (int j = 0; j <= i && j < tlen; j++) {
18+
if (S[i] == T[j]) {
19+
dp[i][j] = (i == 0 || j == 0) ? 1 : dp[i - 1][j - 1];
20+
}
21+
if (i > j)
22+
dp[i][j] += dp[i - 1][j];
23+
}
24+
return dp[slen - 1][tlen - 1];
25+
}
26+
};

Longest_Consecutive_Sequence.cc

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
public:
3+
int longestConsecutive(vector<int> &num) {
4+
// Start typing your C/C++ solution below
5+
// DO NOT write int main() function
6+
set<int> hm;
7+
int n = num.size();
8+
for (int i = 0; i < n; i++)
9+
hm.insert(num[i]);
10+
int ans = 0;
11+
for (int i = 0; i < n; i++) {
12+
int cnt = 1;
13+
int tmp = num[i];
14+
if (hm.find(tmp) == hm.end())
15+
continue;
16+
hm.erase(tmp);
17+
while (hm.find(++tmp) != hm.end()) {
18+
cnt++;
19+
hm.erase(tmp);
20+
}
21+
tmp = num[i];
22+
while (hm.find(--tmp) != hm.end()) {
23+
cnt++;
24+
hm.erase(tmp);
25+
}
26+
ans = max(ans, cnt);
27+
}
28+
return ans;
29+
}
30+
};

Palindrome_Partitioning.cc

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class Solution {
2+
public:
3+
vector<vector<string>> ans;
4+
vector<string> vt;
5+
vector<vector<int>> g;
6+
int len;
7+
8+
bool judge(string &s, int i, int j) {
9+
if (i > j)
10+
return false;
11+
if (g[i][j] != -1)
12+
return g[i][j];
13+
if (i == j)
14+
return g[i][j] = 1;
15+
if (s[i] != s[j])
16+
return g[i][j] = 0;
17+
else {
18+
if (i + 1 == j)
19+
return g[i][j] = 1;
20+
return g[i][j] = judge(s, i + 1, j - 1);
21+
}
22+
}
23+
24+
void dfs(string &s, int cnt) {
25+
if (cnt == len) {
26+
ans.push_back(vt);
27+
return;
28+
}
29+
for (int i = len - 1; i >= cnt; i--) {
30+
if (judge(s, cnt, i)) {
31+
vt.push_back(s.substr(cnt, i - cnt + 1));
32+
dfs(s, i + 1);
33+
vt.pop_back();
34+
}
35+
}
36+
}
37+
38+
vector<vector<string>> partition(string s) {
39+
// Start typing your C/C++ solution below
40+
// DO NOT write int main() function
41+
ans.clear(), vt.clear(), g.clear();
42+
len = s.length();
43+
vector<int> tmp;
44+
for (int i = 0; i < len; i++)
45+
tmp.push_back(-1);
46+
for (int i = 0; i < len; i++)
47+
g.push_back(tmp);
48+
49+
dfs(s, 0);
50+
return ans;
51+
}
52+
};

Palindrome_Partitioning_II.cc

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class Solution {
2+
public:
3+
vector< vector<int> > vt;
4+
bool judge(string &s, int i, int j) {
5+
if (i > j)
6+
return false;
7+
if (vt[i][j] != -1)
8+
return vt[i][j];
9+
if (i == j)
10+
return vt[i][j] = 1;
11+
if (s[i] != s[j])
12+
return vt[i][j] = 0;
13+
else {
14+
if (i + 1 == j)
15+
return vt[i][j] = 1;
16+
else
17+
return vt[i][j] = judge(s, i + 1, j - 1);
18+
}
19+
}
20+
int minCut(string s) {
21+
// Start typing your C/C++ solution below
22+
// DO NOT write int main() function
23+
int len = s.length();
24+
if (len < 2)
25+
return 0;
26+
vector<int> dp, tmp;
27+
dp.clear(), tmp.clear(), vt.clear();
28+
for (int i = 0; i < len; i++) {
29+
dp.push_back(0);
30+
tmp.push_back(-1);
31+
}
32+
for (int i = 0; i < len; i++) {
33+
vt.push_back(tmp);
34+
}
35+
for (int i = 1; i < len; i++) {
36+
if (judge(s, 0, i)) {
37+
dp[i] = 0;
38+
continue;
39+
}
40+
int ans = i;
41+
for (int j = 0; j < i; j++) {
42+
if (judge(s, j + 1, i))
43+
ans = min(ans, dp[j] + 1);
44+
else
45+
ans = min(ans, dp[j] + i - j);
46+
}
47+
dp[i] = ans;
48+
}
49+
return dp[len - 1];
50+
}
51+
};

Pascal's_Triangle II.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
vector<int> getRow(int rowIndex) {
4+
// Start typing your C/C++ solution below
5+
// DO NOT write int main() function
6+
vector<int> cnt, pre;
7+
for (int i = 1; i <= rowIndex + 1; i++) {
8+
if (pre.size() == 0) {
9+
cnt.push_back(1);
10+
} else {
11+
cnt.push_back(1);
12+
for (int j = 1; j < i - 1; j++)
13+
cnt.push_back(pre[j - 1] + pre[j]);
14+
cnt.push_back(1);
15+
}
16+
pre = cnt;
17+
cnt.clear();
18+
}
19+
return pre;
20+
}
21+
};

Pascal's_Triangle.cc

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
class Solution {
2+
public:
3+
vector<vector<int> > generate(int numRows) {
4+
// Start typing your C/C++ solution below
5+
// DO NOT write int main() function
6+
vector<vector<int>> ans;
7+
vector<int> cnt, pre;
8+
for (int i = 1; i <= numRows; i++) {
9+
if (pre.size() == 0) {
10+
cnt.push_back(1);
11+
} else {
12+
cnt.push_back(1);
13+
for (int j = 1; j < i - 1; j++)
14+
cnt.push_back(pre[j - 1] + pre[j]);
15+
cnt.push_back(1);
16+
}
17+
ans.push_back(cnt);
18+
pre = cnt;
19+
cnt.clear();
20+
}
21+
return ans;
22+
}
23+
};

0 commit comments

Comments
 (0)