题目描述
假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?
例如,一只股票在某些时间节点的价格为{9, 11,8,5,7,12,16,14}。如果我们能在价格为5的时候买入并在价格为16时卖出,则能收获最大的利润11。
[牛客网刷题地址]无
思路分析
我们先定义函数diff(i)为当卖出价为数组中第i个数字时可能获得的最大利润。显然,在卖出价固定时,买入价越低获得的利润越大。也就是说,如果在扫描到数组中的第i个数字时,只要我们能够记住之前的i-1个数字中的最小值,就能算出在当前价位卖出时可能得到的最大利润。
测试用例
- 功能测试:存储股票价格的数组无序、单调递增、单调递减。
- 边界值测试:存储股票价格的数组中只有两个数字。
- 特殊输入测试:指向数组的指针为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() {
}
}