• 【Offer】[63] 【股票的最大利润】


    题目描述

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

    [牛客网刷题地址]无

    思路分析

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

    测试用例

    1. 功能测试:存储股票价格的数组无序、单调递增、单调递减。
    2. 边界值测试:存储股票价格的数组中只有两个数字。
    3. 特殊输入测试:指向数组的指针为nullptr。

    Java代码

    public class Offer063 {
        public static void main(String[] args) {
            test1();
            test2();
            test3();
            
        }
    
        public static int MaxDiff(int[] numbers) {
            return Solution1(numbers);
        }
    
    
        private static int Solution1(int[] numbers) {
            
            if(numbers==null || numbers.length<2) {
                return 0;
            }
            
            int min = numbers[0];
            int maxDiff = numbers[1] - min;
            
            for(int i=2;i<numbers.length;i++) {
                if(numbers[i-1]<min) {
                    min = numbers[i-1];
                }
                int currDiff = numbers[i]-min;
                if(currDiff>maxDiff) {
                    maxDiff = currDiff;
                }
            }
            
            return maxDiff;
        }
    
        private static void test1() {
            int[] numbers= {9, 11,8,5,7,12,16,14};
            System.out.println(MaxDiff(numbers));
        }
    
        private static void test2() {
    
        }
        private static void test3() {
    
        }
    
    }
    

    代码链接

    剑指Offer代码-Java

  • 相关阅读:
    一个程序员的负罪感
    【软件安装记录篇】本地虚拟机Centos7快速安装MySQL
    三分钟熟悉进制转换与位运算
    Base64 编码原理
    Java 注解
    数据结构之链表-动图演示
    数据结构之红黑树-动图演示(下)
    数据结构之红黑树-动图演示(上)
    通过TreeMap 和 冒泡算法对JSON 进行排序
    Quartz 之 windowService
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer63-gu-piao-de-zui-da-li-run.html
Copyright © 2020-2023  润新知