zoukankan      html  css  js  c++  java
  • Leetcode 121. 买卖股票的最佳时机

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

    如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。

    注意:你不能在买入股票前卖出股票。

     

    示例 1:

    输入: [7,1,5,3,6,4]
    输出: 5
    解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
    注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。
    示例 2:

    输入: [7,6,4,3,1]
    输出: 0
    解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

    自己写的代码:

      int maxProfit(int* prices, int pricesSize){
        int result[1000];//用数组来保存股票第i天的价格
        int k,m,p;
        for(int i=0;i<1000;i++)
        {
            for(int j=1;j<1000;j++)
            {
                if(a[i]>a[j])//表明买入价格大于卖出价格,不成立退出循环,并更新i,j的值
                {
                    i++;
                    j++;
                }
                else if(a[i]<a[j])//符合条件
                {
                    k=a[i];
                    m=a[j];
                    if(m<a[j])
                    {
                        m=a[j];
                    }
                }
            }
            p=m-k;
            return p;
        }
    }
    

     这个代码的思路是:先取序列中第一个元素作为比较对象,第一个的下一个元素作为被比较的对象

    首先比较这两个元素的值,前提是要保证买入价格小于卖出价格

    不满足前提的话就自动将i,j向前移动1位

    更新后的i,j如果满足前提就将a[j]的值保存下来 a[j]的值也保存下来 j++

    去比较已经保存的a[j]值和不断更新的a[j]的值哪个大,找到最大的a[j]

    用a[j]-a[i]就是要求的值

    如果a[i]-a[j]在更新过程中不满足前提条件,就自动更新到下一个a[i],a[j]的值

    但是由于是暴力求解法,时间复杂度上超出了界限,因此不能算是一个正确的解法

    正确代码:

    int maxProfit(int* prices, int pricesSize){
        int minprice=99999,maxprofit=0;
        for(int i=0;i<pricesSize;i++)
        {
            if(prices[i]<minprice)//判断今天的价格是不是历史最低价格
            {
                minprice=prices[i];
            }
            else //macprofit获取最大的利润
            {
                maxprofit=(prices[i]-minprice)>maxprofit?(prices[i]-minprice):maxprofit;
            }
            
        }
        return maxprofit;
    }
    

    这个方法是用动态规划类的题目

    是用一次遍历的方法来求解的

    最主要的思想就是不断的去更新当前的minprice和maxprofit

  • 相关阅读:
    手写Promise(转)
    阻止element组件中的<el-input/>的粘贴功能(转)
    js 对象深拷贝函数
    20182301 2019-2020-1《程序设计与数据结构》课程总结
    20182301 2019-2020-1 《数据结构与面向对象程序设计》实验9报告
    团队博客第二周——DIG
    20182301 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结
    《团队作业第一周》团队作业——DIG
    20182301 2019-2020-1 《数据结构与面向对象程序设计》哈夫曼实验报告
    20182301 2019-2020-1 《数据结构与面向对象程序设计》第9周学习总结
  • 原文地址:https://www.cnblogs.com/redzzy/p/13745187.html
Copyright © 2011-2022 走看看