Этот ответ основан на методе двух указателей, но можно решить ее и другими способами.
std::vector<int> FindKNearest(const std::vector<int>& array, size_t index, size_t k) {
std::vector<int> result;
result.reserve(k);
int left = index;
int right = left + 1;
auto target = array[index];
while (k > result.size() && (left >= 0 || right < array.size())) {
if ((left >= 0) && ((right >= array.size()) || (target - array[left] < array[right] - target))) {
result.emplace_back(array[left--]);
} else {
result.emplace_back(array[right++]);
}
}
return result;
}
Если вы хотите освоить новый язык программирования, повысить грейд или просто брать в работу более сложные задачи, то приходите учиться в Практикум 🖤