最低票价

2020-05-06  本文已影响0人  我知他风雨兼程途径日暮不赏

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-cost-for-tickets

1 JAVA题目

在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。

通行证允许数天无限制的旅行。 例如,如果我们在第 2 天获得一张为期 7 天的通行证,那么我们可以连着旅行 7 天:第 2 天、第 3 天、第 4 天、第 5 天、第 6 天、第 7 天和第 8 天。
返回你想要完成在给定的列表 days 中列出的每一天的旅行所需要的最低消费。

2. JAVA解答

通过动态规划来解决,当前的状态只与1、7、30天的状态相关联,即可得到对应的状态转移方程式。


空间复杂度O(N),时间复杂度O(N)
class Solution {
    public int mincostTickets(int[] days, int[] costs) {
         if(days.length==0){
            return 0;
        }
        int[] dp = new int[days[days.length-1]+1];
        int di = 0;
        /*
            [主程序-动态规划]
         */
        for(int i=1;i<dp.length;i++){
            if(i==days[di]){
                dp[i] = Math.min(dp[Math.max(0,i-1)]+costs[0],dp[Math.max(0,i-7)]+costs[1]);
                dp[i] = Math.min(dp[i],dp[Math.max(0,i-30)]+costs[2]);
                di++;
            }else{
                dp[i] = dp[i-1];
            }
        }
        return dp[dp.length-1];
    }
}
上一篇下一篇

猜你喜欢

热点阅读