122.买卖股票的最佳时机II
讲解链接:https://programmercarl.com/1005.K%E6%AC%A1%E5%8F%96%E5%8F%8D%E5%90%8E%E6%9C%80%E5%A4%A7%E5%8C%96%E7%9A%84%E6%95%B0%E7%BB%84%E5%92%8C.html
简单思路:逐个计算连续两天的股票差值,sum初始为零,只有出售股票赚钱(为正值)时,计入sum中
class Solution {
public:int maxProfit(vector<int>& prices) {vector<int> Diff(prices.size()-1,0);int sum = 0;for(int i=0;i<prices.size()-1;i++) {Diff[i] = prices[i+1]-prices[i];if(Diff[i]<=0)continue;elsesum+=Diff[i];}return sum;}
};
55. 跳跃游戏
讲解链接:https://programmercarl.com/0055.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8F.html
不用一步一步推过程,
局部最优,计算
cover记录最大到达的下标位置
更新cover: i+nums[i] 和 当前最大到达下标
class Solution {
public:bool canJump(vector<int>& nums) {int cover = 0;if(nums.size()==1)return true;for(int i=0;i<=cover;i++) {cover = max(i+nums[i],cover);if(cover >= nums.size()-1)return true;}return false;}
};
45.跳跃游戏II
讲解链接:https://programmercarl.com/0045.%E8%B7%B3%E8%B7%83%E6%B8%B8%E6%88%8FII.html
计算下一步的最大到达距离
若当前最远距离下标未到终点,ans(记录步数)加一
然后更新为当前最大覆盖距离
class Solution {
public:int jump(vector<int>& nums) {if(nums.size()==1)return 0;//记录最远距离下标int curDistance = 0;//记录走的步数int ans = 0;int nextDistance = 0;for(int i=0;i<nums.size();i++) {//更新下一步覆盖的最远距离下标nextDistance = max(nums[i]+i,nextDistance);//遇到走的最远距离的时候还没有到结尾if(i==curDistance) {//需要再走一步ans ++;//更新覆盖最远距离下标curDistance = nextDistance;//最远距离到集合终点,结束if(nextDistance >= nums.size() -1)break;}}return ans;}
};