61. Rotate List
Company:
#leetcode61 | #medium #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
Please open Telegram to view this post
VIEW IN TELEGRAM
86. Partition List
Company:
Необходимо сохранить исходный относительный порядок узлов в каждом из двух разделов
#leetcode86 | #medium #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
lessDummy для элементов <x, greaterDummy для элементов >=x. Они помогут удобно собирать списки без отдельной обработки первого элемента
x — цепляем его в список less и передвигаем данный указательx — цепляем его в список greater и также передвигаем данный указатель Please open Telegram to view this post
VIEW IN TELEGRAM
92. Reverse Linked List II
Company:
#leetcode92 | #medium #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
[left, right], поэтому ведем подсчет узлов (n) и, если n стал равен left, применяем данный алгоритм, пока n меньше rightn < left, ведем вспомогательный узел dummy, который остановится прямо перед leftdummy, теперь можно выставить нужные ссылки — узел left ссылаем на следующий после right: dummy.next.next = curr, а узел перед left ссылаем на right: dummy.next = prevleft > 1, иначе dummy.next, так как голова списка в таком случае также будет измененаPlease open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Пример:
head = [1,2,3,4,5], left = 2, right = 4#figure #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Теперь доступен отдельный канал JA Roadmap c полной навигацией по всем задачам.
В нем можно очень удобно повторять нужные темы, сразу переходя к постам.
Вскоре еще добавится полная RoadMap по самым нужным задачам для прохождения собеседования, а также топ задач в конкретные компании
Не пропускайте
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
148. Sort List
Company:
#leetcode148 | #medium #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(nlogn)
Space: O(logn)
private ListNode getMid(ListNode head) {
ListNode slow = head;
ListNode fast = head.next;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
Please open Telegram to view this post
VIEW IN TELEGRAM
23. Merge k Sorted Lists
Company:
Объедините все списки в один отсортированный и верните его
#leetcode23 | #hard #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(nlogk)
Space: O(1)
O(nk), что не так хорошоstep, пока данный шаг меньше длины массиваstep равен 1, то есть мы соединяем только текущий и следующий список: merge(list[i], list[i + step]), но далее — после каждого прохода по массиву, мы увеличиваем его в два раза, чтобы объединять уже более длинные промежуточные списки i прохода по массиву должен быть в два раза больше step, чтобы “переступать” через уже объединенные списки, не затрагивая их повторно logk раз и в итоге мы получаем сложность O(nlogk) Please open Telegram to view this post
VIEW IN TELEGRAM
25. Reverse Nodes in k-Group
Company:
Если число узлов не кратно k, то оставшиеся узлы оставьте в том же порядке
#leetcode25 | #hard #linkedlist
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(n)
Space: O(1)
getKNode, которая возвращает k-й узел от начала текущей группы. Если такой узел существует, значит группа полная и её можно перевернуть знакомым алгоритмомkNode.next и используем его как начальное значение для prev, чтобы сразу соединить текущую группу с оставшейся частью спискаprevPart.next = kNode, затем сдвигаем prevPart к концу текущей уже перевёрнутой группыPlease open Telegram to view this post
VIEW IN TELEGRAM
Представь, что кто-то загадал число от 1 до 100, и ты пытаешься его угадать, задавая вопросы: "твоё число больше этого?" или "меньше?".
Самый быстрый способ это сделать — каждый раз отбрасывать половину возможных вариантов. Для этого нужно начать с середины диапазона — с числа 50.
Спрашиваешь: "Твоё число больше 50?":
Теперь снова берёшь середину нового диапазона — например, 75, и повторяешь. С каждым вопросом ты уменьшаешь количество возможных вариантов в два раза и быстро приближаешься к загаданному числу.
Это и есть бинарный поиск — на каждом шаге ты делишь оставшийся диапазон пополам и выбираешь нужную половину в зависимости от условия. Важно помнить, что такой подход работает только с отсортированными данными, без этого алгоритм не сможет правильно сузить область поиска.
Пример кода бинарного поиска заданного числа target в массиве (задача):
class Solution {
public int search(int[] nums, int target) {
int l = 0, r = nums.length - 1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
l = mid + 1;
} else {
r = mid - 1;
}
}
return -1;
}
}l + (r - l) / 2, вместо привычного (l + r) / 2. Это нужно для того, чтобы избежать переполнения int при больших значениях l и r.#binarysearch
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
35. Search Insert Position
Company:
Вам необходимо написать алгоритм со сложностью O(logn) по времени
#leetcode35 | #easy #binarysearch
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(logn)
Space: O(1)
nums[mid] < target: значит target должен быть правее, поэтому сдвигаем левую границу: l = mid + 1r = mid – 1l указывает на позицию вставки:Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
69. Sqrt(x)
Company:
Не допускается использование встроенных функций
#leetcode69 | #easy #binarysearch
Please open Telegram to view this post
VIEW IN TELEGRAM
Time: O(logx)
Space: O(1)
l = 2, r = x / 2, так как квадратный корень числа x точно не больше x / 2 (если x > 1)square = (long) mid * mid, используя приведение к long, чтобы избежать переполненияsquare == x, найден точный корень — сразу возвращаем midsquare < x, ищем большее значение, сдвигая левую границу: l = mid + 1square > x, ищем меньшее значение, сдвигая правую границу: r = mid - 1l будет указывать на первое число, квадрат которого превышает x, поэтому нужный результат — l - 1, то есть нужный по условию округлённый вниз квадратный кореньPlease open Telegram to view this post
VIEW IN TELEGRAM
1539. Kth Missing Positive Number
Company:
Верните k-ое пропущенное число в этом массиве
#leetcode1539 | #easy #binarysearch
Please open Telegram to view this post
VIEW IN TELEGRAM