324.摆动排序II
链接:324.摆动排序II
难度:Medium
标签:贪心、数组、分治、快速选择、排序
简介:汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。为了到达目的地,汽车所必要的最低加油次数是多少?如果无法到达目的地,则返回 -1 。
题解 1 - cpp
- 编辑时间:2022-07-02
- 执行用时:92ms
- 内存消耗:15.8MB
- 编程语言:cpp
- 解法介绍:dp[i] = 当 i 为最后一个加油站时,最远能跑的公里数。
class Solution {
   public:
    int minRefuelStops(int target, int startFuel,
                       vector<vector<int>>& stations) {
        int n = stations.size();
        vector<long> dp(n + 1);
        dp[0] = startFuel;
        for (int i = 0; i < n; i++) {
            for (int j = i; j >= 0; j--) {
                if (dp[j] >= stations[i][0]) {
                    dp[j + 1] = max(dp[j + 1], dp[j] + stations[i][1]);
                }
            }
        }
        for (int i = 0; i <= n; i++) {
            if (dp[i] >= target) return i;
        }
        return -1;
    }
};