leecode第一百二十一题(买卖股票的最佳时机II)

class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int len=prices.size();
        if(len<=0)
            return 0;

        int sta=0,lirun=0;
        while(sta<len-1)
        {
            while(sta<len-2 && prices[sta]>prices[sta+1])//找到当前第一个最小值
                sta++;
            if(sta==len-2 && prices[sta]>prices[sta+1])
                return lirun;

            int max_num=sta+1;
            while(max_num<len-2 && prices[max_num]<prices[max_num+1])//找到第一个最小值后的第一个不小于后面的值
                max_num++;
            if(max_num==len-2 && prices[max_num]<prices[max_num+1])
                max_num++;

            lirun=lirun+prices[max_num]-prices[sta];//我们认为最近的利润是当前第一个最小值和第一个不输第二天的值的差,而这种利润的和不会少于全局唯一最大利润
            sta=max_num+1;
        }

        return lirun;
    }
};

分析:

思路有,但是一开始不确认正不正确,但是举的例子告诉我这样想目前是对的,于是就写了。

值的注意的是,while(max_num<len-2 && prices[max_num]<prices[max_num+1]),这句话里以后一定要先把值的边界性判断放前面,不然max_num+1超出边界,会提示错误。

原文地址:https://www.cnblogs.com/CJT-blog/p/10641841.html

时间: 2024-10-06 01:11:26

leecode第一百二十一题(买卖股票的最佳时机II)的相关文章

LeetCode 腾讯精选50题-- 买卖股票的最佳时机 II

贪心算法: 具体的解题思路如下: II 的解题思路可以分为两部分, 1. 找到数组中差值较大的两个元素,计算差值. 2. 再步骤一最大的元素的之后,继续遍历,寻找差值最大的两个元素 可以得出的是,遍历指针是一直向着数组的尾部移动的,由于要取得局部的最大差值,这一局部子数组中的元素一定是递增的,所以先找到递增结束的位置,那就是递增位置的起点,然后遍历至此轮递增结束时的位置,这样就得到了一个局部的最优解. 此思路由于指针只遍历一次,所以时间复杂度为O(N). 以下是代码: class Solutio

【Leetcode】【简单】【122. 买卖股票的最佳时机 II】【JavaScript】

题目描述 122. 买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 示例 1: 输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 .随后,在第 4 天(股票价格

一起talk C栗子吧(第一百二十一回:C语言实例--线程知识体系图)

各位看官们,大家好,上一回中咱们说的线程属性的例子,这一回咱们说的例子是:线程知识体系图.闲话休提,言归正转.让我们一起talk C栗子吧! 我们在前面的章回中介绍了与线程相关的知识,在今天的章回中,我们将对这些知识进行总结,并且整理成一张知识体系图,方便大家掌握线程相关的知识. 下面是我们整理的知识体系图,请大家参数: 上图内容中的知识点都有相应的章回对应,下面是我整理的章回对应关系.为了大家方便,我设置了链接,大家可以直接点击链接跳到相应的章回中. 线程概念 线程概念:第一百零七回 线程标识

122. 买卖股票的最佳时机 II

https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/solution/ 暴力 本题可以多次买卖股票,如果只允许一次买卖股票,整个暴力就是n2的算法,如果可以无限制买卖股票直接用普通的写法不是很好写,可以用递归来解决.先考虑只允许一次买卖的暴力解法,双层循环,外层循环i代表买入股票的时机,内层j循环从i+1开始,代表买入股票后的股票价格,如果发现prices[j]>prices[i]就尝试卖掉并和全局max比较,如

【leetcode 简单】第三十二题 买卖股票的最佳时机Ⅱ

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 .   随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(

第一百二十一节,JavaScript事件绑定及深入

JavaScript事件绑定及深入 学习要点: 1.传统事件绑定的问题 2.W3C事件处理函数 3.IE事件处理函数 4.事件对象的其他补充

2. 解题报告~买卖股票的最佳时机 II

原题地址:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/22/ 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票

买卖股票的最佳时机 II

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). 示例 1: 输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 .   随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(

[LeetCode]数组——买卖股票的最佳时机 II

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票). C++ class Solution { public: int maxProfit(vector<int>& prices) { int sum = 0; for (size_t i = 1; i < prices.size(); i++) { if (