Minimum Cost For Tickets Javascript C++
Problem Statement
Ek 1-day pass jo costs[0] dollars ka hota hai.
Ek 7-day pass jo costs[1] dollars ka hota hai.
Ek 30-day pass jo costs[2] dollars ka hota hai.Yeh passes utne hi consecutive days ka travel cover karte hain jitne unka tenure hai. Jaise agar aap 7-day pass day 2 ko lete ho, toh aap 2 se lekar 8 tak, 7 din travel kar sakte ho.Aapko pata karna hai ki minimum kitne dollars aapko spend karne honge, taaki aap apni list of days mein har din travel kar sako.
Example 1: Input: days = [1,4,6,7,8,20], costs = [2,7,15]
Output: 11 Explanation: Yahan ek tariqa hai passton ko kharidne ka taaki aap apne travel plan cover kar sako:Day 1 ko, aapne 1-day pass kharida jo costs[0] = $2 ka tha. Yeh day 1 ko cover kar raha hai. Day 3 ko, aapne 7-day pass kharida jo costs[1] = $7 ka tha. Yeh day 3, 4, …, 9 din cover kar raha tha. Day 20 ko, aapne 1-day pass kharida jo costs[0] = $2 ka tha. Yeh day 20 ko cover kar raha tha. In total, aapne $11 kharch kiye aur apne sabhi travel days cover kar liye.Example 2: Input: days = [1,2,3,4,5,6,7,8,9,10,30,31], costs = [2,7,15]
Output: 17 Explanation: Yahan ek tariqa hai passton ko kharidne ka taaki aap apne travel plan cover kar sako:Day 1 ko, aapne 30-day pass kharida jo costs[2] = $15 ka tha. Yeh day 1 se lekar 30 tak cover kar raha tha. Day 31 ko, aapne 1-day pass kharida jo costs[0] = $2 ka tha. Yeh day 31 ko cover kar raha tha. In total, aapne $17 kharch kiye aur apne sabhi travel days cover kar liye.
Constraints:
1 <= days.length<= 365
1 <= days[i] <= 365 days strictly increasing order mein hone chahiye.
costs.length3 hona chahiye. 1 <= costs[i] <= 1000
Minimum Cost For Tickets Javascript C++
Train travel ka minimum cost nikaalne ke liye, jab specific travel days aur ticket costs diye gaye hain, hum ek dynamic programming (DP) approach use kar sakte hain. Is idea ko implement karne ke liye, hum ek DP array maintain karte hain jahan har entry represent karegi minimum cost jo hume chahiye ek specific day tak travel cover karne ke liye.
Intuition
Dynamic Programming Array: Ek DP array banayein dp jahan dp[i] represent karega minimum cost jo travel karne ke liye chahiye day i tak.Initialization: DP array ka size 366 set kariye (days 1 se 365 tak cover karne ke liye) aur dp[0] = 0 set karein (day 0 pe cost nahi lagti).Iterate Over Travel Days: Har travel day ke liye days array mein, minimum cost calculate karein based on three types of passes:1-day pass: Iski cost hogi 1-day pass ki cost plus previous day tak travel ki cost,7-day pass: Iski cost hogi 7-day pass ki cost plus woh cost jo travel day se 7 din pehle ka din cover karta hai (ya 0 agar woh day 1 se pehle chala jaye),30-day pass: Iski cost hogi 30-day pass ki cost plus woh cost jo travel day se 30 din pehle ka din cover karta hai (ya 0 agar woh day 1 se pehle chala jaye).Update the DP Array: Har din ke liye days array mein, DP array ko update karein minimum cost se jo teen options mein se calculate hui hai.Return the Result: Result dp[365] mein milega, jo minimum cost dega sab travel days ko cover karne ke liye.
Approach
Time Complexity:
O(365 + d)
hai, jahand
travel days ka number hai. Loop total 365 days ke liye chalega aur hum har travel day ko check karenge.
Space Complexity:
O(1)
hai DP array ke liye, kyunki iska size fixed hai 366.
Solution
var mincostTickets = function(days, costs) {
const dp = new Array(366).fill(0); // DP array for days 0 to 365
const travelDays = new Set(days); // Set for quick lookup of travel days
// Har saal ke din ko iterate karo
for (let i = 1; i <= 365; i++) {
if (travelDays.has(i)) {
// Har tarah ki ticket ke liye cost calculate karo
const cost1 = dp[i - 1] + costs[0]; // 1-day pass
const cost7 = dp[Math.max(0, i - 7)] + costs[1]; // 7-day pass
const cost30 = dp[Math.max(0, i - 30)] + costs[2]; // 30-day pass
// Teen options mein se minimum cost lo
dp[i] = Math.min(cost1, Math.min(cost7, cost30));
} else {
// Agar travel day nahi hai, toh pehle ka cost carry forward karo
dp[i] = dp[i - 1];
}
}
// Answer minimum cost hoga saare travel days ko cover karne ke liye
return dp[365];
};
const dp = new Array(366).fill(0);
– Yahan hum ek DP array bana rahe hain jo 0 se 365 days tak sab kuch 0 se fill karta hai.const travelDays = new Set(days);
– Hum ek set bana rahe hain travel days ka quick lookup karne ke liye.For Loop (
for (let i = 1; i <= 365; i++)
):Har saal ke din ko 1 se 365 tak traverse kar raha hai.
if (travelDays.has(i))
– Check kar raha hai ki kya current day travel day hai.Agar travel day hai, to teen tarah ki passes (1-day, 7-day, 30-day pass) ke liye cost calculate karta hai:
1-day pass:
dp[i - 1] + costs[0]
7-day pass:
dp[Math.max(0, i - 7)] + costs[1]
30-day pass:
dp[Math.max(0, i - 30)] + costs[2]
In teen options mein se jo minimum cost hoga, usse
dp[i]
update karo.
Agar current day travel day nahi hai, to previous day ka cost carry forward kar do:
dp[i] = dp[i - 1]
Return Statement:
return dp[365];
– Yeh minimum cost return karega sab travel days ko cover karne ke liye.
Yeh code minimum cost calculate karne ke liye DP approach use karta hai aur efficiently travel days ko cover karta hai.
Solution
#include
#include
class Solution {
public:
int mincostTickets(std::vector& days, std::vector& costs) {
int n = days.size();
std::vector dp(366, 0); // DP array for days 0 to 365
// Har saal ke din ko traverse karo
for (int i = 1; i <= 365; i++) {
// Agar travel day nahi hai, toh pehle ka cost carry forward karo
if (std::find(days.begin(), days.end(), i) == days.end()) {
dp[i] = dp[i - 1];
} else {
// Har type ki ticket ke liye cost calculate karo
int cost1 = dp[i - 1] + costs[0]; // 1-day pass
int cost7 = dp[std::max(0, i - 7)] + costs[1]; // 7-day pass
int cost30 = dp[std::max(0, i - 30)] + costs[2]; // 30-day pass
// Teen options mein se minimum cost lo
dp[i] = std::min(cost1, std::min(cost7, cost30));
}
}
// Answer minimum cost hoga sab travel days ko cover karne ke liye
return dp[365];
}
};
#include <vector>
aur#include <algorithm>
necessary header files include kar rahe hain jo aapko vector aur algorithm functionalities provide karte hain.class Solution
define kar rahe hain jo mincostTickets function implement karega.mincostTickets
function kodays
aurcosts
vector ke references mil rahe hain.dp
array initialize kar rahe hain size 366 ke saath, 0 se 365 days cover karne ke liye.For loop 1 se 365 tak iterate karta hai:
Agar
i
travel day nahi hai tohdp[i]
ko previous day ke cost se fill karte hain.Agar
i
travel day hai toh teen tarikon se cost calculate karte hain: 1-day, 7-day aur 30-day pass ke basis pe.Minimum cost ko
dp[i]
mein save karte hain.
Function ke end mein
dp[365]
return karte hain jo minimum cost hai sab travel days cover karne ke liye.