目录
[122. 买卖股票的最佳时机 II](#122. 买卖股票的最佳时机 II)
[55. 跳跃游戏](#55. 跳跃游戏)
[45. 跳跃游戏 II](#45. 跳跃游戏 II)
[1005. K 次取反后最大化的数组和](#1005. K 次取反后最大化的数组和)
122. 买卖股票的最佳时机 II
很难解释原理。一开始想的是前缀和,后来打草稿发现是相邻差,验证了发现样例中没有反例,结果通过了
cpp
class Solution {
public:
int maxProfit(vector<int>& prices) {
int ans=0;
for(int i=1;i<prices.size();i++){
if(prices[i]-prices[i-1]>0){
ans+=prices[i]-prices[i-1];
}
}
return ans;
}
};
55. 跳跃游戏
记录覆盖范围
cpp
class Solution {
public:
bool canJump(vector<int>& nums) {
int far=0;
for(int i=0;i<nums.size();i++){
if(far<i)return false;
far=max(far,i+nums[i]);
if(far==nums.size()-1)return true;
}
return true;
}
};
45. 跳跃游戏 II
cpp
class Solution {
public:
int jump(vector<int>& nums) {
if(nums.size()==1)return 0;
int ans=0;
int far=0;
int index=0;
for(int i=0;i<nums.size()-1;i++){
far=max(far,i+nums[i]);
if(i==index){
ans++;
index=far;
}
}
return ans;
}
};
1005. K 次取反后最大化的数组和
cpp
class Solution {
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size()&&k;i++){
if(nums[i]<0){
nums[i]=-nums[i];
k--;
}
}
int sum=0;
for(int t:nums){
sum+=t;
}
if(k%2){
int minnum=nums[0];
for(int t:nums){
minnum=min(minnum,t);
}
sum=sum-minnum*2;
}
return sum;
}
};
