股票的最大利润

题目:

假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖股票一次可能获得的最大利润是多少?

例如:一只股票在某些时间节点的价格是{9,11,8,5,7,12,16,14}。

如果我们能在价格为5的时候买入并在价格16的时卖出,则能获得最大的利润。

 

思路:

我们定义函数diff(i)为当卖出价格为数组中第i个数字时可能获得的最大利润。显然,在卖出价格固定时,买入价越低获得的利润最大。也就是说,如果扫描到数组中第i个数字时,只要我们能够记住之前i-1个数字中的最小值,就能算出当前价位卖出时,可能获得的最大利润。

 

 1 public class Solution {
 2 
 3     public int maxDiff(int[] numbers) {
 4         if(numbers == null && numbers.length) {
 5             return 0;
 6         }
 7 
 8         int min = numbers[0];
 9         int maxDiff = numbers[1]-numbers[0];
10 
11         for(int i = 2; i < numbers.length; i++) {
12             
13             // you should know here numbers[i-1]
14             if(numbers[i-1] < min) {
15                 min = numbers[i-1];
16             }
17 
18             int currentDiff = numbers[i] - min;
19 
20             if(currentDiff > maxDiff) {
21                 maxDiff = currentDiff;
22             }
23         }
24 
25         return maxDiff;
26     }
27 
28 
29     public static void main(String[] args) {
30         Solution s = new Solution();
31         int[] data = {9,11,8,5,7,12,16,14};
32 
33         System.out.println(s.maxDiff(data));
34     }
35 }

 

转载于:https://www.cnblogs.com/wylwyl/p/10342270.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值