1.杨辉三角 II
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。
思路:同杨辉三角那道题类似,只不过在是定义两个数组,一个用于记录当前值,一个用于存放上个值。外循环遍历行,内循环遍历个数。特别注意for的初始和结束条件。
class Solution {
public:
vector<int> getRow(int rowIndex) {
//这个表示定义一个能存放rowIndex+1个int型的数组,并且每一位都赋值为1.
vector<int> res(rowIndex+1,1);
vector<int> temp(rowIndex+1,1);
for(int i=2;i<=rowIndex;++i){
for(int j=1;j<i;++j){
res[j] = temp[j-1]+temp[j];
}
temp = res;
}
return res;
}
};
参考链接:https://leetcode-cn.com/problems/pascals-triangle-ii/
2.买卖股票的最佳时机
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。
思路:动态规划,这个推荐看https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/solution/yi-ge-fang-fa-tuan-mie-6-dao-gu-piao-wen-ti-by-l-3/ 讲了六种股票问题的解法。
class Solution {
public:
int maxProfit(vector<int>& prices) {
int dp_i_0 = 0;
int dp_i_1 = INT_MIN;
for(int i=0;i<prices.size();i++){
dp_i_0 = max(dp_i_0,dp_i_1+prices[i]);
dp_i_1 = max(dp_i_1,-prices[i]);
}
return dp_i_0;
}
};
//base case: dp[0][0] = 0 dp[0][1] = -price[0]
//状态转移方程:dp[i][0] = max(dp[i-1][0],dp[i-1][1]+prices[i])
// dp[i][1] = max(dp[i-1][1],dp[i-1][0]-prices[i])
参考链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/