Сделайте сумму массива равной 0, используя ceil или floor для каждого элемента.
Учитывая массив arr[] , состоящий из N целых чисел с плавающей запятой, задача состоит в том, чтобы изменить массив, выполнив ceil() или floor() для каждого элемента массива так, чтобы сумма элементов массива была близка к 0 .
Примеры:
Input: arr[] = {6.455, -1.24, -3.87, 2.434, -4.647}
Output: {6, -2, -3, 3, -4}
Explanation:
Perform the floor operation on array elements at indices {0, 1} and ceil operation at indices {2, 3, 4} modifies the array to {6, -2, -3, 3, -4} whose sum of elements is 0, which is closest to 0.Input: arr[] = {-12.42, 9.264, 24.24, -13.04, 4.0, -9.66, -2.99}
Output: {-13, 9, 24, -13, 4, -9, -2}
Подход: Данную проблему можно решить, найдя сумму значений ceil() всех элементов массива, и если сумма массива положительна, то найдите ceil такого количества элементов, чтобы оно стало ближайшим к значению 0. Следуйте шаги ниже, чтобы решить данную проблему:
- Инициализируйте переменную, скажем, sum до 0 , которая хранит сумму элементов массива.
- Инициализируйте массив, скажем, A[] , в котором хранятся обновленные элементы массива.
- Пройдите массив arr[] и найдите сумму ceil() элементов массива и обновите значение A[i] до значения ceil(arr[i]) .
- Если значение суммы положительное, найдите пол некоторого элемента массива, чтобы уменьшить сумму до ближайшей к 0 , а количество таких элементов массива определяется минимумом суммы и N .
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(N)
Вспомогательное пространство: O(N)