摩天轮技术一面面试题

本文通过一道摩天轮技术一面的面试题,探讨如何使用动态规划解决寻找连座最低价格的问题。分别介绍了三种方法,包括暴力求解、以i为结尾的连座总票价以及以i为开头的连座总票价,重点讨论了以i为开头的动态规划方法,该方法具有较低的时间复杂度O(n)和空间复杂度O(n-x)。
摘要由CSDN通过智能技术生成

题目是给定一个List,下标是座位号,对应的是价格,价格不会小于0,求连座的最小价格。

/**
 * 价格座位列表seats, 价格下标就是座位号
 * <p>
 * 1. x张连坐票
 * 2. 总价最便宜
 * 3. 返回这x张票第一个位置的下标
 * 考虑可能x, 和seats长度比较大的情况*/

在面试中我使用了第一种方法暴力求解,随后又想到了使用动态规划,见方法二、三
第二种是以i为结尾的连座的总票价,第三种是以i为开头的连座的总票价。个人觉得第三种方法最好。如有更好的方法,请在下方留言

原因如下:

  1. 相比于第一种,时间复杂度由O(n*n)提到了O(n)
  2. 相比于第二种,dp[]数组不需要额外的无用的空间

动态规划的思路在于,确定了初始值dp[0],因为连座x是固定的,想象一下滑动窗口,所以后面的每一个状态只需要添加紧挨滑动窗口末尾的那个值,并将滑动窗口的头部值去掉就可以了。


import java.util.Arrays;
import java.util.List;

/**

  • @Author: liulingzhou

  • @Date: 2021/5/17 17:53

  • @descption
    /
    public class TestFindCheapestSeats {
    /
    *

    • 价格座位列表seats, 价格下标就是座位号
      1. x张连坐票
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值