可能时间复杂度会有很多需要改进的地方。
/* 题目描述
在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买-卖的顺序进行)。给出一天中的股票变化序列,请写一个程序计算一天可以获得的最大收益。请采用实践复杂度低的方法实现。
给定价格序列prices及它的长度n,请返回最大收益。保证长度小于等于500。
测试样例:
[10,22,5,75,65,80],6
返回:
87*/
Lis算法的思想实践在这里,应用之算出【0,i】最大递增值,存在一个辅助数组start中
然后将数组反转,算出【0,i】的最小递增负值,,存在一个辅助数组end中
然后遍历size,求出max(start[i] - end[size-1-i]);
··
public class test01 {
public static void main(String[] args) {
Integer[] a1 = new Integer[]{10, 22, 24,5, 75, 65, 80,89};
int size = a1.length;
int[] start =new int[size];
int[] end =new int[size];
List<Integer> reverseList = Arrays.asList(a1);
List<Integer> list1 = new ArrayList<>();
list1.addAll(reverseList);
Collections.reverse(reverseList);
lisStart(list1, start);
lisEnd(reverseList, end);
in