给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法

var maxProfit = function (prices) {
  if (prices.length == 0) {
    return 0;
  }

  var minProfit = prices[0];
  var maxProfit = 0;
  for (var i = 0; i < prices.length; i++) {
    if (prices[i] < minProfit) {
      minProfit = prices[i];
    }else if(prices[i] - minProfit > maxProfit){
      maxProfit = prices[i] - minProfit;
    }
  }

  return maxProfit;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 题目要求设计一个算法,能够求出给定一个数组 prices,它的第 i 个元素 prices[i] 表示一支给定股票第 i 价格。你只能选择一天买入这只股票,并选择未来的某一天卖出股票设计一个算法来计算你所能获得的最大利润。如果你不能获得任何利润,返回 0。 具体实现方法可以通过遍历数组来找到数组中最小的数,然后再寻找它之后的最大值,两者相减即为所求的利润最大值,如果没有利润,则返回值为0。可以通过交易中获得的最大利润来证明算法的正确性。 ### 回答2: 这道题目是一道典型的贪心算法,并且有一个非常巧妙的办法可以在遍历过程中同时计算出最大利润。 我们记录两个整数变量 minPrice 和 maxProfit,其中 minPrice 表示数组 prices 中当前遍历到的最小值,而 maxProfit 表示当前最大利润。遍历数组时,我们每遍历到一个数字,就用当前价格减去 minPrice 得到一个当前的利润,并将这个利润和当前的 maxProfit 取一个最大值,然后继续向后遍历。如果当前价格比 minPrice 还要小,那么我们就更新 minPrice 为当前价格,因为我们希望能够在价格最低的时候买入。 最后遍历完成后,maxProfit 就是我们要求的最大利润。如果 maxProfit 小于等于 0,那么说明我们无法获取任何利润,因此返回 0。 下面给出 Java 代码实现: class Solution { public int maxProfit(int[] prices) { int minPrice = Integer.MAX_VALUE; int maxProfit = 0; for (int i = 0; i < prices.length; i++) { if (prices[i] < minPrice) { minPrice = prices[i]; } else { maxProfit = Math.max(maxProfit, prices[i] - minPrice); } } return maxProfit; } } ### 回答3: 题目描述 给定一个数组prices,它的第i个元素prices[i]表示一支给定股票第i价格。你只能选择一天买入这只股票,并选择未来的某一个不同日子卖出股票设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回0。 思路分析 本题可以使用贪心算法来解决。假如我们在买入选择在最低点购买,那么在之后的每一天里,只要股票价格高于买入价,我们就可以选择在当前卖出股票,获取最大利润。 因此,我们只需要通过一次遍历数组,找到最低点和最高利润即可。假设low表示当前最低点,max_profit表示当前最高利润,那么对于数组中的每一个元素,我们不断更新low和max_profit即可。 代码实现 class Solution { public: int maxProfit(vector<int>& prices) { if(prices.size() <= 1) { // 特判数组长度小于等于1的情况 return 0; } int low = prices[0]; // 初始化最低价格数组的第一个元素 int max_profit = 0; // 初始化最大利润为0 for(int i = 1; i < prices.size(); i++) { if(prices[i] < low) { // 如果当前价格低于最低价格,更新最低价格 low = prices[i]; }else { // 如果当前价格高于最低价格,计算当前利润并更新最大利润 int cur_profit = prices[i] - low; if(cur_profit > max_profit) { max_profit = cur_profit; } } } return max_profit; } };

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值