[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;
    }
}

  



时间: 2024-08-10 03:01:59

[LeetCode] 121. Best Time to Buy and Sell Stock 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. Exam

leetCode 121. Best Time to Buy and Sell Stock 数组

121. Best Time to Buy and Sell Stock 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 algor

Java for LeetCode 121 Best Time to Buy and Sell Stock

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. 解题思路

LeetCode 121: Best Time to Buy and Sell Stock

题目如下: 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

Leetcode 121. Best Time to Buy and Sell Stock 最佳股票售卖时(动态规划,数组,模拟)

题目描述 已知一个数组,第i个元素表示第i天股票的价格,你只能进行一次交易(买卖各一次),设计算法找出最大收益 测试样例 Input: [7, 1, 5, 3, 6, 4] Output: 5 最大收益 = 6-1 = 5 (不是7-1 = 6,因为先买后卖,7买,1买亏了6) Input: [7, 6, 4, 3, 1] Output: 0 最大收益为0 详细分析 初看非常简单,遍历数组,每次选择一个元素,找到这个元素后面的数组的最大值,计算差值,和当前最大收益比较即可,就像这样: [7,1,

[leetcode] 121. Best Time to Buy and Sell Stock 解题报告

动态规划,注意处理当前最大值小于0的情况 public int maxProfit(int[] prices) { if (prices == null || prices.length <= 1) return 0; int curMax = 0,result = 0; for (int i = 1; i < prices.length; i++) { curMax = Math.max(0, curMax + prices[i] - prices[i-1]); result = Math.

[LeetCode] 123. Best Time to Buy and Sell Stock III 买卖股票的最佳时间 III

Say you have an array for which the ith element is the price of a given stock on day i. Design an algorithm to find the maximum profit. You may complete at most two transactions. Note:You may not engage in multiple transactions at the same time (ie,

121. Best Time to Buy and Sell Stock (一) leetcode解题笔记

121. Best Time to Buy and Sell Stock 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 algor

[LeetCode OJ] Best Time to Buy and Sell Stock I

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. eg:输