买卖股票
cpp
class Solution {
public:
int maxProfit(vector<int>& prices) {
bool godown=1;
int prev=prices[0];
vector<int> min,max;
for(int i=1;i<prices.size();i++){
if(godown&&prices[i]>prev){
min.push_back(prices[i-1]);
godown=0;
}else if(!godown&&prices[i]<prev){
godown=1;
max.push_back(prices[i-1]);
}
prev=prices[i];
}
if(max.size()<min.size()){
max.push_back(prices[prices.size()-1]);
}
int res=0;
for(int i=0;i<max.size();i++){
res+=max[i];
res-=min[i];
}
return res;
}
};
也可记录每天卖出昨天股票的利润,这样将所有正利润加起来,就是总利润。
跳跃游戏
cpp
class Solution {
public:
bool canJump(vector<int>& nums) {
int cur=0;
int n=nums.size();
if(n==1)return 1;
while(cur<n){
int max_hop=0;
int index=cur;
for(int i=1;i<=nums[cur];i++){
if(cur+i==n-1)return 1;
if(i+nums[cur+i]>max_hop){
max_hop=i+nums[cur+i];
index=cur+i;
}
}
if(cur==index)return 0;
cur=index;
}
return 0;
}
};
跳跃游戏2
cpp
class Solution {
public:
int jump(vector<int>& nums) {
int cur=0;
int n=nums.size();
int count=0;
if(n==1)return count;
while(cur<n){
int max_hop=0;
int index=cur;
for(int i=1;i<=nums[cur];i++){
if(cur+i==n-1)return count+1;
if(i+nums[cur+i]>max_hop){
max_hop=i+nums[cur+i];
index=cur+i;
}
}
if(cur==index)return -1;
cur=index;
count++;
}
return -1;
}
};
K次取反后最大化的数组和
cpp
class Solution {
public:
int largestSumAfterKNegations(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
int count=0;
for(;k>0&&count<nums.size();k--){
if(nums[count]>0)break;
nums[count]=-nums[count];
count++;
}
if(k>0&&k%2){
sort(nums.begin(),nums.end());
nums[0]=-nums[0];
}
int res=0;
for(int i=0;i<nums.size();i++){
res+=nums[i];
}
return res;
}
};
这个做法的复杂度为O(nlogn)