(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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 让你轻松架设FTP服务器

    让你轻松架设FTP服务器你想架设你的FTP服务器吗?笔者将从IIS和第三方软件两个角度,教会你轻松架设FTP服务器的方法,让你玩转FTP服务器的架设。一、用IIS架设FTP服务器:1、设置FTP服务器:(1)设置“FTP站点”标签项:在“控制面板→管理工具→Internet服务管理器”窗口中,选中“默认FTP站点→右键→属性”,在图1的“默认FTP站点属性”框中,“IP地址”可以使用默认,端口号保持“2

    2022年7月21日
    10
  • xshell连接不上虚拟机的问题和解决办法_vmware远程连接服务器虚拟机

    xshell连接不上虚拟机的问题和解决办法_vmware远程连接服务器虚拟机首先按照正常步骤安装虚拟机,centos6.5文件,然后登陆Linux输入命令:vi/etc/sysconfig/network-scripts/ifcfg-eth0键入i进行编辑大致如下DEVICE=eth0TYPE=EthernetONBOOT=yesBOOTPROTO=dhcpIPADDR=192.168.175.102NETMASK=255.255.255…

    2022年9月22日
    2
  • python之lambda函数/表达式[通俗易懂]

    python之lambda函数/表达式[通俗易懂]lambda函数也叫匿名函数,允许快速定义单行函数。通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。格式lambda与def的区别1)def创建的方法是有名称的

    2022年7月5日
    30
  • Struts2漏洞复现合集

    Struts2漏洞复现合集1.Struts2简介Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2是Struts的下一代产品,是在struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。其全新的Struts2的体系结构与Struts1的体系结构差别巨大。Struts2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务

    2022年7月19日
    19
  • linux虚拟机设置固定IP

    linux虚拟机设置固定IPlinux虚拟机设置固定IPubuntu虚拟机(桥接模式)设置固定IP方法很简单,直接在系统设置里面配置就可以了1.先使用ifconfig查看掩码2.点击设置3.点击network再点击set4.第一个为虚拟机ip,为避免冲突,建议设置210以上的ip5.重启,ifconfig查看ip不同版本系统界面可能不同,但操作类似…

    2022年7月16日
    12

发表回复

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

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