买卖股票的最佳时机

问题理解

整数数组的下标表示股票某天的价格,需要返回最大利润。题目多少有点离谱了,在同一天多次买卖该股票,但是特定日期的价格是确定的。

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int result=0;
        for(int i=1;i<prices.size();i++)
        {
            result+=max(prices[i]-prices[i-1],0);
        }
        return result;
    }
}; 

跳跃游戏

问题理解

如果下标和该位置的值相加或者与小于该值的数相加等于最后一位数的下标,就可以到达末尾。
如果怎么都会到达一个值为0的下标处,返回false;

class Solution {
public:
    bool canJump(vector<int>& nums) {
        int cover=0;
        for (int i = 0; i <=cover; i++) {
            cover=max(cover,nums[i]+i);
            if (cover>= nums.size() - 1) {
                return true;
            }
        }return false; 
    }
};

看了题解,有点思路,但不多。

跳跃游戏2

问题理解

需要给出从起点到终点的最小跳跃次数。保证一定能跳到。

K次取反后的最大和

题目理解

给整个数组排序:-X,0,X
可以多次选择同一个下标i;
返回的是最大和;
最大值最大是所有值绝对值之和。
如果K<负值的个数,肯定从绝对值最大的负值开始反;
如果K>负值的个数,反完所有负值后,当前所有值都是正的,那么就从绝对值最小的反;是2的倍数的话就正过来了。

代码

class Solution {
    static bool cmp(int a, int b) { return abs(a) > abs(b); }

public:
    int largestSumAfterKNegations(vector<int>& nums, int k) {
        // int sum = 0;
        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 sum = 0;
        for (int a : nums)
            sum += a;
        return sum;
    }
};
```
posted on 2025-12-05 23:07  FAfa_C++  阅读(0)  评论(0)    收藏  举报