122.
股票利润可以分解的,理解这一点就很简单。
/** @lc app=leetcode.cn id=122 lang=cpp** [122] 买卖股票的最佳时机 II*/// @lc code=start
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:int maxProfit(vector<int>& prices) {int result=0;for(int i=0;i<prices.size()-1;i++){result+=max(prices[i+1]-prices[i],0);}return result;}
};
// @lc code=end
55.
本质是一个最大区间覆盖问题。
/** @lc app=leetcode.cn id=55 lang=cpp** [55] 跳跃游戏*/// @lc code=start
#include<iostream>
#include<vector>
using namespace std;
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(nums[i]+i,cover);if(cover>=nums.size()-1){return true;}}return false;}
};
// @lc code=end
45.
上一题的变种,关键理清什么时候走。注意下标问题。
/** @lc app=leetcode.cn id=45 lang=cpp** [45] 跳跃游戏 II*/// @lc code=start
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:int jump(vector<int>& nums) {if(nums.size()==1)return 0;int curd=0;int count=0;int nextd=0;for(int i=0;i<nums.size();i++){nextd=max(nums[i]+i,nextd);if(i==curd){count++;curd=nextd;if(nextd>=nums.size()-1)break;}}return count;}
};
// @lc code=end
1005.
很简单的,先把负数反转,看有没有剩的再把最小正数反转。
/** @lc app=leetcode.cn id=1005 lang=cpp** [1005] K 次取反后最大化的数组和*/// @lc code=start
#include<iostream>
#include<vector>
using namespace std;
class Solution {
public:static bool cmp(int a,int b){return abs(a)>abs(b);}int largestSumAfterKNegations(vector<int>& nums, int k) {sort(nums.begin(),nums.end(),cmp);for(int i=0;i<nums.size();i++){if(nums[i]<0&&k>0){nums[i]*=-1;k--;}}if(k%2==1){nums[nums.size()-1]*=-1;}int ans=0;for(int a:nums){ans+=a;}return ans;}
};
// @lc code=end