zoukankan      html  css  js  c++  java
  • [LeetCode] 121. Best Time to Buy and Sell Stock Java

     题目:

     Say you have an array for which the ith element is the price of a given stock on day i.

     If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

     Example 1:

    Input: [7, 1, 5, 3, 6, 4]
    Output: 5
    
    max. difference = 6-1 = 5 (not 7-1 = 6, as selling price needs to be larger than buying price)

     Example 2:

    Input: [7, 6, 4, 3, 1]
    Output: 0
    
    In this case, no transaction is done, i.e. max profit = 0.

    题意及分析:给出一个股票的价格序列,买入一次卖出一次,求能获得最大利润。其实就是求一个数组中,后面的数减去前面的数能得到的最大值。最容易想到的肯定是每次选一个数,遍历后面的数,求出直接的差然后和当前最大值进行比较,这样时间复杂度为O(n*n),
    但是最后会超时。对题目进行分析,发现可以用动态规划的方法求解。我们用一个数组res存储到某点能有的最大值,首先对于其中一个数prices[i](1<i<length):
    (1)如果当前的数大于前一个数,可以轻易得出到达该点可以得到的最大值res[i]为前一个数的最大值+(prices[i]-prices[i-1]),然后和当前最大值进行比较,大于当前最大值则重置最大值
    (2)如果当前数小于前一个数,又分为两种情况
      a.如果到前一个数的最大<=0,所以能到达当前点的最大差值res[i]为0
      b.如果到达前一个数最大差值大于0,则能到达当前点的最大差值res[i]为Math.max(res[i-1]+(prices[i]-prices[i-1]),0);
    对一个数单独处理最后遍历剩下的数即可得到答案。

    代码:
    public class Solution {
        public int maxProfit(int[] prices) {
            int length=prices.length;
            int[] res=new int[length];
            int max=0;
            if(length<=1)
            	return 0;
            res[0]=0;
            res[1]=0;
            for(int i=1;i<length;i++){
            	if(prices[i]>prices[i-1]){
            		res[i]=res[i-1]+(prices[i]-prices[i-1]);
            		if(max<res[i])
            			max=res[i];
            	}else{
            		if(res[i-1]<=0)
            			res[i]=0;
            		else{
            			res[i]=Math.max(res[i-1]+(prices[i]-prices[i-1]),0);
            		}
            	}
            }
            if(max>0) return max;
            else return 0;
        }
    }
    
    
    

      



  • 相关阅读:
    vs运行代码版本不一致删除缓存
    spring framework 各版本源码下载地址
    类型初始值设定项引发异常
    datagridview 点击列标题排序
    软媒魔方u盘装系统
    sql中exists,not exists的用法
    java web第一个Servlet程序
    《ASP.NET 本质论》HttpApplication的处理管道 ,HttpMoudle,HttpHandler
    如何正确设置 Informix GLS 及 CSDK 语言环境
    Linux网络流量控制工具—Netem
  • 原文地址:https://www.cnblogs.com/271934Liao/p/6920644.html
Copyright © 2011-2022 走看看