动态规划问题
- 这题考虑用dfs,因为很多重复的问题
- 或者是用相同规模的数组来处理这个问题
- 或者将二维数组压缩成一维数组参考文献
1
2
3
4
5
6
7
8
9
10
11
12
13class Solution {
public:
int maxValue(vector<vector<int>>& grid) {
int n = grid[0].size(), m = grid.size();
vector<int> dp(n+1,0);
for(int i = 1; i <= m ; ++i){
for(int j = 1; j <= n; ++j){
dp[j] = max(dp[j-1],dp[j])+grid[i-1][j-1];
}
}
return dp[n];
}
};
连续子数组的最大和
题目如下:
- 这道题目比较简单,就是如何判定从数组内i到j累加结束?
1 | class Solution { |
股票的最大利润
题目如下:
主要是去寻找最低价格和最高的利润
1
2
3
4
5
6
7
8
9
10
11
12
13class Solution {
public:
int maxProfit(vector<int>& prices) {
if(prices.size() == 0)return 0;
int begin_num = prices[0]; //买入价格
int end_num = 0; //利润
for(int i = 1;i < prices.size(); ++i){
begin_num = min(prices[i], begin_num); //这一步主要是找最低的购买价格
end_num = max(end_num, prices[i] - begin_num);
}
return end_num;
}
};
正则表达式匹配
题目如下:
如何去处理那两个特殊的符号,然后再应用到程序中
一个就是dp数组来处理,分清楚步骤和判断条件
给出代码如下:
1 | class Solution { |