I have the following dataset, where pickedUp
and deliveredAt
are normalized timestamps:
const orders = [{
pickedUp: 100, // Needed - 1, AgentID - 1
deliveredAt: 102
}, {
pickedUp: 100, // Needed - 2, AgentID - 2
deliveredAt: 110
}, {
pickedUp: 200, // Needed - 2, AgentID - 2
deliveredAt: 220,
}, {
pickedUp: 200, // Needed - 2, AgentID - 1
deliveredAt: 400
}, {
pickedUp: 105, // Needed - 2, AgentID - 1
deliveredAt: 180
}];
Now, as seem from the comments, a minimum of 2 agents are needed to deliver all these orders.
However, in my implementation, for the above dataset, I receive 4
as the minimum.
Here is my implementation:
const orders = [{
pickedUp: 100, // Needed - 1, AgentID - 1
deliveredAt: 102
}, {
pickedUp: 100, // Needed - 2, AgentID - 2
deliveredAt: 110
}, {
pickedUp: 200, // Needed - 2, AgentID - 2
deliveredAt: 220,
}, {
pickedUp: 200, // Needed - 2, AgentID - 1
deliveredAt: 400
}, {
pickedUp: 105, // Needed - 2, AgentID - 1
deliveredAt: 180
}];
function findMinumumDeliveryAgents(input) {
let needed = 1;
// sort by pickup time
let sorted = input.sort((a, b) => {
return a.pickedUp - b.pickedUp
})
for (let i = 1; i < sorted.length; i++) {
if (sorted[i].pickedUp < sorted[i - 1].deliveredAt) {
needed++;
}
}
return needed
}
console.log(findMinumumDeliveryAgents(orders));
The discrepancy occurs because the order with pickedUp: 105
is matched with AgentID - 2
, and not AgentID - 1
.
Any idea how to solve this problem efficiently?