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

      

  • 相关阅读:
    string的erase函数和find、find_first_of函数
    strtok和strtok_r
    Linux添加硬盘 挂载硬盘(附 Linux磁盘挂载和mount共享 带图)
    linux下访问中文目录文件
    用yield写协程实现生产者消费者
    用进程池和线程池实现高并发服务器
    python自带线程池
    python自带进程池
    模拟线程池代码
    面向对象的多次调用线程(含参版)
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/11187874.html
Copyright © 2011-2022 走看看