zoukankan      html  css  js  c++  java
  • 【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

  • 相关阅读:
    POJ-2955 Brackets(括号匹配问题)
    NYOJ
    石子合并问题
    hdu 4915 括号匹配+巧模拟
    hdu 4920
    hdu 4911 求逆序对数+树状数组
    hdu 4923 单调栈
    hdu 4930 斗地主恶心模拟
    hdu 4927 组合+公式
    hdu 4925 黑白格
  • 原文地址:https://www.cnblogs.com/haoworld/p/offer63-gu-piao-de-zui-da-li-run.html
Copyright © 2011-2022 走看看