动态规划实践,美团面试题算法实现

这是一篇关于动态规划在解决股票交易问题中的应用文章,通过实例讲解如何在限定交易次数的情况下找到最大收益。文章首先介绍了初始的LIS算法思路,然后探讨了如何通过反转数组和辅助数组来寻找最大收益。最后,提到了一种更简洁的算法,通过记录之前和之后的最小值,使用动态规划策略以更低的时间复杂度求解问题。
摘要由CSDN通过智能技术生成

可能时间复杂度会有很多需要改进的地方。
/* 题目描述
在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值