Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

121.122买股票的最佳时机 #39

Open
wind-jyf opened this issue Apr 25, 2020 · 0 comments
Open

121.122买股票的最佳时机 #39

wind-jyf opened this issue Apr 25, 2020 · 0 comments
Labels

Comments

@wind-jyf
Copy link
Owner

买股票的最佳时机

买股票的最佳时机|

一、题目详情

给定一个数组,它的第 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

二、解题思路

  1. 记录今天之前买入的最小值
  2. 计算今天之前买入,今天卖出的获利
  3. 比较每天的最大获利

三、代码实现

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    if(prices.length <= 1){
        return 0;
    }
    let min = prices[0];//记录今天之前买入的最小值
    let max = 0;//记录今天卖出的获利
    for(let i =1;i<prices.length;i++){
        max = Math.max(max,prices[i]-min);
        min = Math.min(min,prices[i]);
    }
    return max;
};

买股票的最佳时机II

一、题目详情

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

设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

示例 1:

输入: [7,1,5,3,6,4]
输出: 7
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 
     随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6-3 = 3 

示例 2:

输入: [1,2,3,4,5]
输出: 4
解释: 在第 1 天(股票价格 = 1)的时候买入,在第 5  (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 
     注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。
     因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

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

提示:

  • 1 <= prices.length <= 3 * 10 ^ 4
  • 0 <= prices[i] <= 10 ^ 4

二、解题思路

  1. 因为可以无限次的购买,假设每一天都进行买入,第二天便进行卖出
  2. 如果第二天的价钱低于第一天,可以当做前一天并没有进行买入
  3. 同时,第二天依然进行买入

三、代码实现

/**
 * @param {number[]} prices
 * @return {number}
 */
var maxProfit = function(prices) {
    if(prices.length <2){
        return 0;
    } 
    let buy = prices[0];//计入买入时的价格
    let result = 0;
    for(let i =1;i<prices.length;i++){
        if(prices[i]>buy){
            result+=prices[i]-buy;
        }
        buy = prices[i]
    }
    return result;
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant