题目是给定一个List,下标是座位号,对应的是价格,价格不会小于0,求连座的最小价格。
/**
* 价格座位列表seats, 价格下标就是座位号
* <p>
* 1. x张连坐票
* 2. 总价最便宜
* 3. 返回这x张票第一个位置的下标
* 考虑可能x, 和seats长度比较大的情况*/
在面试中我使用了第一种方法暴力求解,随后又想到了使用动态规划,见方法二、三
第二种是以i为结尾的连座的总票价,第三种是以i为开头的连座的总票价。个人觉得第三种方法最好。如有更好的方法,请在下方留言
原因如下:
- 相比于第一种,时间复杂度由O(n*n)提到了O(n)
- 相比于第二种,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, 价格下标就是座位号
-
-
- x张连坐票