最低票价 题目思路与算法代码实现复杂度分析 题目 思路与算法 本题是基础一维动态题,虽然很基础,但是还是想了很久,留下了菜的不行的泪水。dp[i]表示从当前天开始到今年结束为止旅行话费的最小支出(disbursement)。先用一个set把当前旅行的天数存入,后续,进行遍历即可,记得倒序遍历。 代码实现 class Solution { public int mincostTickets(int[] days, int[] costs) { HashSet<Integer> set = new HashSet<>(); int len = days.length; int min = days[0]; int max = days[len - 1]; for (int day : days){ set.add(day); } // dp数组 int[] dp = new int[400]; for (int i = max; i >= min; i--) { if (set.contains(i)) { dp[i] = Math.min(Math.min(costs[0]+dp[i+1],costs[1]+dp[i+7]), costs[2] + dp[i+30]); }else{ dp[i] = dp[i+1]; } } return dp[min]; } } 复杂度分析 时间复杂度空间复杂度O(N)O(N)