diff --git a/3.cpp b/3.cpp new file mode 100644 index 00000000..413a60ed --- /dev/null +++ b/3.cpp @@ -0,0 +1,118 @@ +#include +#include + +void fillGaps(std::vector& arr) { + int n = arr.size(); // O(1) + + for (int i = 0; i < n; ++i) { + if (arr[i] == -1) { // O(1) + int left = i - 1; // O(1) + int right = i + 1; // O(1) + + // Ищем ближайшее значение слева + while (left >= 0 && arr[left] == -1) { // O(n) в худшем случае + left--; // O(1) + } + + // Ищем ближайшее значение справа + while (right < n && arr[right] == -1) { // O(n) в худшем случае + right++; // O(1) + } + + // Если оба соседа найдены, вычисляем среднее + if (left >= 0 && right < n) { // O(1) + arr[i] = (arr[left] + arr[right]) / 2; // O(1) + } + } + } +} +// таким образом О(n^2) +void testFillGaps() { + // Тест 1 + std::vector arr1; + arr1.push_back(1); + arr1.push_back(-1); + arr1.push_back(10); + arr1.push_back(4); + fillGaps(arr1); + std::cout << "Test 1: "; + for (int num : arr1) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 1 5 10 4 + + // Тест 2: Массив без пропусков + std::vector arr2; + arr2.push_back(5); + arr2.push_back(10); + arr2.push_back(15); + arr2.push_back(20); + fillGaps(arr2); + std::cout << "Test 2: "; + for (int num : arr2) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 5 10 15 20 + + // Тест 3: Массив с пропуском в начале + std::vector arr3; + arr3.push_back(-1); + arr3.push_back(2); + arr3.push_back(3); + fillGaps(arr3); + std::cout << "Test 3: "; + for (int num : arr3) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 2 2 3 + + // Тест 4: Массив с пропуском в конце + std::vector arr4; + arr4.push_back(1); + arr4.push_back(2); + arr4.push_back(-1); + fillGaps(arr4); + std::cout << "Test 4: "; + for (int num : arr4) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 1 2 2 + + // Тест 5: Массив с несколькими пропусками + std::vector arr5; + arr5.push_back(1); + arr5.push_back(-1); + arr5.push_back(-1); + arr5.push_back(4); + fillGaps(arr5); + std::cout << "Test 5: "; + for (int num : arr5) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 1 2 3 4 + + // Тест 6: Пустой массив + std::vector arr6; + fillGaps(arr6); + std::cout << "Test 6: "; + for (int num : arr6) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: (пустой массив) + + // Тест 7: Массив с одним элементом + std::vector arr7; + arr7.push_back(100); + fillGaps(arr7); + std::cout << "Test 7: "; + for (int num : arr7) { + std::cout << num << " "; + } + std::cout << "\n"; // Ожидаемый результат: 100 +} + +int main() { + + testFillGaps(); + return 0; +} diff --git a/C3100-Malkov_Maksim_lab4 b/C3100-Malkov_Maksim_lab4 new file mode 100644 index 00000000..59b080ee --- /dev/null +++ b/C3100-Malkov_Maksim_lab4 @@ -0,0 +1,44 @@ +#include +#include + + +void Rec(std::vector& arr, int k, int start, int depth, std::vector& indices) { + int n = arr.size(); + + if (depth == k) { + int sum = 0; + for (int idx : indices) { + sum += arr[idx]; + } + if (sum == 0) { + for (int idx : indices) { + std::cout << idx << " "; + } + std::cout << std::endl; + } + return; + } + + for (int i = start; i < n; ++i) { + indices.push_back(i); + Rec(arr, k, i + 1, depth + 1, indices); + indices.pop_back(); + } +} + +void findSubarrays(std::vector& arr, int k) { + std::vector indices; + Rec(arr, k, 0, 0, indices); +} + +int main() { + int n, k; + std::cin >> n; + std::cin >> k; + + std::vector arr(n); + for (int i = 0; i < n; ++i) { + std::cin >> arr[i]; + } + findSubarrays(arr, k); +} diff --git a/iso.cpp b/iso.cpp new file mode 100644 index 00000000..a450dc47 --- /dev/null +++ b/iso.cpp @@ -0,0 +1,66 @@ +#include +#include +#include +#include + + +bool Iso(const std::string& a, const std::string& b) { + // Если длины строк не равны, они не могут быть изоморфными + if (a.length() != b.length()) { + return false; + } + + // Создаем двe хеш-таблицы для отслеживания соответствий символов + std::unordered_map one; //O(n) + std::unordered_map reverseone; + // O(n) + 3 * 1 байт * 2 мапы + + // Итерируемся по каждому символу строк + for (size_t i = 0; i < a.length(); ++i) { + char charA = a[i]; + char charB = b[i]; + // + 1 байт * 2 + + if (one.count(charA)) { + if (one[charA] != charB) { // Проверяем, совпадает ли с charB + return false; + } + } else { + one[charA] = charB; // Устанавливаем новое соответствие так как его еще нет + } + + + if (reverseone.count(charB)) { // Если уже есть соответствие для charB + if (reverseone[charB] != charA) { // Проверяем, совпадает ли оно с charA + return false; + } + } else { + reverseone[charB] = charA; + } + } + + return true; // Если все проверки пройдены, строки изоморфны +} +void runTests() { + // Тесты с обычными значениями + assert(Iso("egg", "add") == true); + assert(Iso("foo", "bar") == false); + // (3 * 1 + 1 (за ноль) + 4 (за длину)) * 2 + + // Пограничные значения + assert(Iso("", "") == true); // Пустые строки + assert(Iso("a", "a") == true); // Одна буква, совпадающая + assert(Iso("a", "b") == true); // Одна буква, разные + + // Проверка на разные длины строк + assert(Iso("abc", "defg") == false); +} + +int main() { + runTests(); + return 0; +} + +// в итоге память это 2 * O(4) + 3 * 1 байт * 2 мапы + 1 байт * 2 + (3 * 1 + 1 (за ноль) + 4 (за длину)) * 2 = 32 байта + + diff --git a/main (1).cpp b/main (1).cpp new file mode 100644 index 00000000..b1162c16 --- /dev/null +++ b/main (1).cpp @@ -0,0 +1,41 @@ +#include +void Quicksort(int* array, int size) { + int left = 0; + int right = size - 1; + int middle = array[rand() % size]; + do { + while (array[left] < middle) { + left++; + } + while (array[right] > middle) { + right--; + } + if (left <= right) { + int temporary = array[left]; + array[left] = array[right]; + array[right] = temporary; + left++; + right--; + } + } while (left <= right); + if (right > 0) { + Quicksort(array, right + 1); + } + if (left < size) { + Quicksort(&array[left], size - left); + } +} + +int main() { + int number; + std::cin >> number; + int* array = new int[number]; + for (int count = 0; count < number; count++) { + std::cin >> array[count]; + } + Quicksort(array, number); + for (int count = 0; count < number; count++) { + std::cout << array[count] << " "; + } + delete[] array; +} \ No newline at end of file diff --git a/main (2).cpp b/main (2).cpp new file mode 100644 index 00000000..82710180 --- /dev/null +++ b/main (2).cpp @@ -0,0 +1,46 @@ +/****************************************************************************** + + Online C++ Compiler. + Code, Compile, Run and Debug C++ program online. +Write your code in this editor and press "Run" button to compile and execute it. + +*******************************************************************************/ + +#include +#include + +void Sort(std::vector& arr) { + if (arr.empty()) return; + int maxElement = arr[0]; + for (size_t i = 1; i < arr.size(); ++i) { + if (arr[i] > maxElement) { + maxElement = arr[i]; + } + } + + std::vector count(maxElement + 1, 0); + + for (int num : arr) { + count[num]++; + } + + int index = 0; + for (int i = 0; i <= maxElement; i++) { + while (count[i] > 0) { + arr[index++] = i; + count[i]--; + } + } +} + +int main() { + std::vector arr = {4, 2, 2, 8, 3, 3, 1}; + Sort(arr); + std::cout << "Отсортированный массив: "; + for (int num : arr) { + std::cout << num << " "; + } + std::cout << std::endl; + + return 0; +} diff --git a/main (3).cpp b/main (3).cpp new file mode 100644 index 00000000..ea3c6fad --- /dev/null +++ b/main (3).cpp @@ -0,0 +1,46 @@ +/****************************************************************************** + + Online C++ Compiler. + Code, Compile, Run and Debug C++ program online. +Write your code in this editor and press "Run" button to compile and execute it. + +*******************************************************************************/ + +#include +#include + +void optimizedBubbleSort(std::vector& arr) { + int n = arr.size(); + bool swapped; + + for (int i = 0; i < n - 1; ++i) { + swapped = false; + + for (int j = 0; j < n - i - 1; ++j) { + if (arr[j] > arr[j + 1]) { + + std::swap(arr[j], arr[j + 1]); + swapped = true; + } + } + + + if (!swapped) { + break; + } + } +} + +int main() { + std::vector arr = {64, 34, 25, 12, 22, 11, 90}; + + optimizedBubbleSort(arr); + + std::cout << "Отсортированный массив: "; + for (int num : arr) { + std::cout << num << " "; + } + std::cout << std::endl; + + return 0; +} diff --git "a/\320\276\321\202\321\207\320\265\321\202_\320\260\320\273\320\263\320\276\321\201\321\213_\320\273\320\260\320\261\320\2605.docx" "b/\320\276\321\202\321\207\320\265\321\202_\320\260\320\273\320\263\320\276\321\201\321\213_\320\273\320\260\320\261\320\2605.docx" new file mode 100644 index 00000000..b2df7fda Binary files /dev/null and "b/\320\276\321\202\321\207\320\265\321\202_\320\260\320\273\320\263\320\276\321\201\321\213_\320\273\320\260\320\261\320\2605.docx" differ