diff --git a/Lab-3.cpp b/Lab-3.cpp new file mode 100644 index 00000000..16e68497 --- /dev/null +++ b/Lab-3.cpp @@ -0,0 +1,50 @@ +#include +#include +#include +#include + +std::vector find_unique(std::vector& elements, int size) { + std::vector unique_arr; + + // Определение максимального и минимального значений: O(n) + int maxPositive = *std::max_element(elements.begin(), elements.end()); + int minNegative = *std::min_element(elements.begin(), elements.end()); + + // Определение наибольшего абсолютного значения и создание вектора seen: O(maxAbs) + int maxAbs = std::max(std::abs(maxPositive), std::abs(minNegative)); + std::vector seen(maxAbs * 2 + 1, false); + + // Основной цикл для проверки на уникальность: O(n) + for (int num : elements) { + if (!seen[num + maxAbs]) { + unique_arr.push_back(num); // Добавляем уникальный элемент в unique_arr + seen[num + maxAbs] = true; // Отмечаем элемент как увиденный + } + } + + return unique_arr; + // Итоговая сложность: O(n) +} + +int main() { + // Тест 1: Список с одним элементом + std::vector singleElementList = {1}; + std::vector expectedSingleElementList = {1}; + std::vector resultSingleElementList = find_unique(singleElementList, 1); + assert(resultSingleElementList == expectedSingleElementList); + + // Тест 2: Список с повторяющимися элементами + std::vector duplicateList = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4}; + std::vector expectedDuplicateList = {1, 2, 3, 4}; + std::vector resultDuplicateList = find_unique(duplicateList, 10); + assert(resultDuplicateList == expectedDuplicateList); + + // Тест 3: Список с отрицательными элементами + std::vector negativeList = {-1, -2, -3, -3, -2, -1, 1, 2, 0}; + std::vector expectedNegativeList = {-1, -2, -3, 1, 2, 0}; + std::vector resultNegativeList = find_unique(negativeList, 10); + assert(resultNegativeList == expectedNegativeList); + + std::cout << "Все тесты пройдены успешно!" << std::endl; + return 0; +} \ No newline at end of file