From 181e2528b66d0aaf9d4f1c0dfd87c6656b2bc933 Mon Sep 17 00:00:00 2001 From: roma-dxunvrs Date: Tue, 15 Sep 2026 20:28:25 +0300 Subject: [PATCH] 15.09.26 --- .../Архитектуры/Платформа Wrench.md | 8 ++- ...irst and Last Position of Element in Sorted Array.md | 51 +++++++++++++++++++ АиСД/План.md | 22 ++++++++ АиСД/Список задач.md | 1 + 4 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 АиСД/Задачи/LeetCode/Find First and Last Position of Element in Sorted Array.md create mode 100644 АиСД/План.md diff --git a/Computer Science/Архитектуры/Платформа Wrench.md b/Computer Science/Архитектуры/Платформа Wrench.md index c553faf..8dd89f1 100644 --- a/Computer Science/Архитектуры/Платформа Wrench.md +++ b/Computer Science/Архитектуры/Платформа Wrench.md @@ -59,4 +59,10 @@ - Ошибка компилятора `multiple .org directives not allowed` - В одной секции - один `.org` (один в `.text`, один в `.data`) ### Чтение из пустого ввода -- `ERROR: memory access error: input is depleted` \ No newline at end of file +- `ERROR: memory access error: input is depleted` +### Сдвиги +- Если сдвинуть числа больше чем на 32, то просто зануление - для сдвига влево +- Для сдвигов вправо, если исходное число было положительным - зануление +- Для сдвигов вправо, если иходное число было отрицательным - `-1` +### Переходы +- В отличие от БЭВМ переходы тут работают иначе. Переходы, которые сравнивают с нулем, учитывают только знак (в бэвм учитывали еще `n+v(mod2)`). Поэтому надо самому реализовывать переходы, которые учитывают специфику доп. кода через `bvz+bltz` например \ No newline at end of file diff --git a/АиСД/Задачи/LeetCode/Find First and Last Position of Element in Sorted Array.md b/АиСД/Задачи/LeetCode/Find First and Last Position of Element in Sorted Array.md new file mode 100644 index 0000000..56c94dc --- /dev/null +++ b/АиСД/Задачи/LeetCode/Find First and Last Position of Element in Sorted Array.md @@ -0,0 +1,51 @@ +Leetcode #34 | #Medium | [[Бин. поиск]] +## Идея +Просто два фирменных бин. поиска. Для первого прохода инваринт, что правый указатель >= элемента (тогда он попадет на его первое вхождение). Для второго прохода инвариант, что правый указатель > элемента (тогда левый укажет на последнее вхождение) +## [[Big-O]] +- Время ```O(logN)``` +- Память ```O(1)``` +## Код +```Java +class Solution { + public int[] searchRange(int[] nums, int target) { + if (nums.length == 0) { + return new int[]{-1, -1}; + } + int[] res = new int[2]; + + int l = -1; + int r = nums.length; + + while (r-l > 1) { + int m = (r+l)/2; + + if (nums[m] >= target) { + r = m; + } else { + l = m; + } + } + + if (r >= nums.length || nums[r] != target) { + return new int[]{-1, -1}; + } + res[0] = r; + + l = -1; + r = nums.length; + + while (r-l > 1) { + int m = (r+l)/2; + + if (nums[m] <= target) { + l = m; + } else { + r = m; + } + } + + res[1] = l; + return res; + } +} +``` \ No newline at end of file diff --git a/АиСД/План.md b/АиСД/План.md new file mode 100644 index 0000000..8dfb50e --- /dev/null +++ b/АиСД/План.md @@ -0,0 +1,22 @@ +Сложные ДВА УКАЗАТЕЛЯ / Слияния массивов: + + Squares of a Sorted Array (LeetCode #977) + + Summary Ranges (LeetCode #228) + + String Compression (LeetCode #443) + (Здесь проверяют, не забудешь ли ты обработать последний элемент после выхода из цикла). + +Деревья / Графы (на аккуратность обхода): + + Lowest Common Ancestor (Любые вариации) + + Number of Islands / Max Area of Island (Проверка на выход за границы матрицы r < 0 || c < 0). + + Word Search (LeetCode #79 - 2D Backtracking). + +Сложные строки / Стек: + + Simplify Path (LeetCode #71) + + Valid Parentheses (со всякими усложнениями) \ No newline at end of file diff --git a/АиСД/Список задач.md b/АиСД/Список задач.md index 1703609..6f62711 100644 --- a/АиСД/Список задач.md +++ b/АиСД/Список задач.md @@ -76,3 +76,4 @@ [[Valid Palindrome II]] [[Largest Rectangle In Histogram]] [[Sliding Window Maximum]] +[[Find First and Last Position of Element in Sorted Array]] \ No newline at end of file