Вы можете использовать дизайн двоичного дерева поиска (BST) в своих интересах.
Для любого узла в BST все значения справа больше, чем этот узел, а слева меньше, чем этот узел.
Вы можете использовать функцию поиска с измененным способом найти узел, который соответствует вашему бюджету.
int largestValueLessThanN(Node* root, int N)
{
// Base cases
if (root == NULL)
return -1;
if (root->key == N)
return N;
// If root's value is smaller, try in right subtree
else if (root->key < N) {
int k = largestValueLessThanN(root->right, N);
if (k == -1)
return root->key;
else
return k;
}
// If root's key is greater, return value from left subtree.
else if (root->key > N)
return largestValueLessThanN(root->left, N);
}
В вашем случае кажется, что вам нужно найти узел с максимальной ценой, которая меньше указанного бюджета, тогда вы добавляете минимальное время от этого узла.
Вы не упомянули, что произойдет, если бюджет после нахождения необходимого узла достаточно велик, чтобы получить вам еще один узел . Вы можете вычесть цену найденного узла из своего бюджета и снова выполнить ту же операцию, чтобы получить другой узел.