(LeetCode-数组-1) 买卖股票的最佳时机[通俗易懂]

(LeetCode-数组-1) 买卖股票的最佳时机

大家好,又见面了,我是全栈君。

1.买卖股票的最佳时机

假设你有一个数组,其中第 i 个元素是一支给定股票第 i 天的价格。如果您只能完成最多一笔交易(即买入和卖出一股股票),则设计一个算法来找到最大的利润。

输入: [7, 1, 5, 3, 6, 4]
输出: 5

最大利润 = 6-1 = 5(不是 7-1 = 6, 因为卖出价格需要大于买入价格)

分析:
1.只能交易一笔
2.变量current为买入价格,max为最大利润
3.低则买入,高则卖出

int maxProfit(vector<int>& prices) {
        if(prices.empty())return 0;
        int max=0,current=prices[0];
        for(int i=1;i<prices.size();i++){
        if(current>prices[i]){
            current=prices[i];
        }else{
            int sum=prices[i]-current;
            if(sum>max)max=sum;
        }
        }
        return max;
}

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

假设有一个数组,它的第 i 个元素是一个给定的股票在第 i 天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。

分析:
1.可以交易多笔
2.相邻价格中,只要后一次比前一次高,就买入

int maxProfit(vector<int>& prices) {
     if(prices.empty())return 0;
       int max = 0;
       for(int i=1; i<prices.size(); i++) {
         if(prices[i] - prices[i-1] > 0) {
              max += (prices[i] - prices[i-1]);
         }
     }
     return max;
}

3.买卖股票的最佳时机 III

假设你有一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来找到最大的利润。你最多可以完成两笔交易。你不可同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

分析:
1.最多可以进行两笔交易
2.将数组分为左右两个子数组,分别求出对应的最大利润

int maxProfit(vector<int>& prices) {
            if(prices.empty())return 0;
            int min=prices.front(),max=prices.back(),size=prices.size();
            vector<int> left(size,0);
            vector<int> right(size,0);
            for(int i=1;i<size;i++){
            if(prices[i]>min){
                left[i]=(prices[i]-min)>left[i-1]?(prices[i]-min):left[i-1];
            }else{
                left[i]=left[i-1];
                min=prices[i];
            }
    }
    for(int i=size-2;i>=0;i--){
        if(prices[i]<max){
            right[i]=(max-prices[i])>right[i+1]?(max-prices[i]):right[i+1];
        }else{
            right[i]=right[i+1];
            max=prices[i];
        }
    }
    int result=0;
    for(int i=0;i<size;i++){
        result=(right[i]+left[i])>result?(right[i]+left[i]):result;
    }
    return result;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107604.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstrom 2021.12激活码[最新免费获取]

    (phpstrom 2021.12激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1435QFILVV-eyJsaWN…

    2022年3月30日
    41
  • realsense深度图像保存方法[通俗易懂]

    realsense深度图像保存方法[通俗易懂]一般使用realsense时会保存视频序列,当保存深度图像时,需要注意保存的图像矩阵的格式,不然可能造成深度值的丢失。在众多图像库中,一般会使用opencv中的imwrite()函数进行深度图像的保存。一般深度图像中深度值的单位是mm,因此一般使用np.uint16作为最终数据格式保存。例子:importnumpyasnpimportcv2deffun1(…

    2022年4月25日
    30
  • qpst专用ROM包_专用播放器视频怎么激活成功教程

    qpst专用ROM包_专用播放器视频怎么激活成功教程经试验可以成功安装license,具体步骤如下:一、从HP官方网上下载QTP10.0并安装。二、安装成功后,在C:\ProgramFiles\CommonFiles\MercuryInteractive下创建文件夹:LicenseManager三、将激活成功教程工具mng-mpt82.ese复制到C:\ProgramFiles\HP\QuickTestProfessional\bi…

    2022年10月5日
    0
  • python怎么读取xlsx文件_arcgis地理加权回归

    python怎么读取xlsx文件_arcgis地理加权回归空间计量经济学打破大多数经典统计和计量分析中相互独立的基本假设,主要解决如何在横截面数据和面板数据的回归模型中处理空间相互作用(空间自相关)和空间结构(空间不均匀性)分析的问题。空间计量经济理论认为一个地区空间单元上的某种经济地理现象或某一属性值与邻近地区空间单元上同一现象或属性值是相关的。也就是说,各区域之间的数据存在与时间序列相关相对应的空间相关。空间计量模型所研究的空间效应包括空间自相关和空…

    2022年8月31日
    1
  • Actuator「建议收藏」

    Actuator「建议收藏」#Actuator引入依赖spring-boot-starter-actuator,通过endpoint来暴露HTTP或JMX来监管应用通过http://localhost:8080/actuat

    2022年8月5日
    2
  • 关于Hbase的cache配置[通俗易懂]

    关于Hbase的cache配置

    2022年1月18日
    65

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号