【力扣 中等 C】983. 最低票价

目录

题目

解法一:动态规划


题目

【力扣 中等 C】983. 最低票价_第1张图片

解法一:动态规划

int min(int a, int b) {
    return a < b ? a : b;
}

int binarySearch(const int* nums, int start, int end, int target) {
    int left = start, right = end;
    int index = end + 1;
    while (left <= right) {
        int mid = (left + right) / 2;
        if (nums[mid] < target) {
            left = mid + 1;
        } else if (nums[mid] > target) {
            index = mid;
            right = mid - 1;
        } else {
            return mid;
        }
    }
    return index;
}
 
int mincostTickets(int* days, int daysSize, int* costs, int costsSize) {
    int* dp = malloc(sizeof(*dp) * (daysSize + 1));
    for (int i = 0; i < daysSize; i++) {
        dp[i] = INT_MAX;
    }
    dp[daysSize] = 0;
    
    const int cDays[3] = {1, 7, 30};
    for (int i = daysSize - 1; i >= 0; i--) {
        for (int j = 0; j < 3; j++) {
            int nextIndex = binarySearch(days, i, daysSize - 1, days[i] + cDays[j]);
            dp[i] = min(dp[i], costs[j] + dp[nextIndex]);
        }
    }
    
    int minCost = dp[0];
    free(dp);
    return minCost;
}

你可能感兴趣的:(c语言,leetcode,数据结构,算法,开发语言)