zoukankan      html  css  js  c++  java
  • 剑指Offer——股票的最大利润

    1、题目描述

      假设把股票的价格按照时间顺序先后存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?假如,一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们能在价格为5 的时候买入并在价格为16的时候卖出,则能获得最大的利润。

    2、代码实现

    package com.baozi.offer;
    
    /**
     * @author BaoZi
     * @create 2019-07-15-11:17
     */
    public class Offer32 {
        public static void main(String[] args) {
            Offer32 offer32 = new Offer32();
            int[] array = new int[]{9, 11};
            int result = offer32.maxDiff(array);
            System.out.println(result);
    
        }
    
        //显然再加个固定的时候,买入的价格越低获得的利润越大,也就是说,如果再扫描到数组中的第i个数字的时候,
        //只要我们能够直到之前的i-1个数字中的最小值,就能够直接算出来在当前价格卖出所获得的利润是多少。
        public int maxDiff(int[] array) {
            if (array.length == 0 || array == null) {
                return 0;
            }
            //该变量用于记录当前位置时之前的i-1个数字的最小值是多少
            int min = array[0];
            //股票一定是先买入才能卖出,所以这里初始化的时候一定是数组中第二个数字的时候才有机会获得利润
            int maxDiff = array[1] - min;
            for (int i = 2; i < array.length; i++) {
                if (array[i - 1] < min) {
                    min = array[i - 1];
                }
                int tempDiff = array[i] - min;
                if (maxDiff < tempDiff) {
                    maxDiff = tempDiff;
                }
            }
            return maxDiff;
        }
    }
    

      

  • 相关阅读:
    cha[] strrev(char[])
    线段树入门了解
    求最大严格递增序列
    素数环
    20181016-10 每周例行报告
    第五周例行报告
    作业要求 20180925-1 每周例行报告
    作业要求20180925-2 功能测试
    作业要求 20180925-3 效能分析
    作业要求20180925-4 单元测试,结对
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/11187874.html
Copyright © 2011-2022 走看看