Files
obsidian/АиСД/Задачи/LeetCode/Merge Sorted Array.md
T
roma-dxunvrs 0e6e583e6d
deploy / Pull and Restart (push) Successful in 17s
refactor: wiki links -> md links
2026-09-22 08:52:23 +03:00

18 lines
1.1 KiB
Markdown

Leetcode #88 | #Easy | [Два указателя](../../Методы/Два%20указателя.md) | [Указатель на запись](../../Методы/Указатель%20на%20запись.md)
## Идея
Три указателя, сливаем с конца. Первый указатель на конец первого m-1, второй на n-1, третий указатель - указатель на запись - n+m-1. Цикл while пока p2>=0. Если элемент из первого больше пишем его по write, иначе пишем из второго и двигаем соответствующие указатели, в конце двигаем write.
## Big-O
- Время ```O(N+M)```
- Память ```O(1)```
## Код
```Java
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int p1 = m - 1, p2 = n - 1, w = m + n - 1;
while (p2 >= 0) {
if (p1 >= 0 && nums1[p1] > nums2[p2]) nums1[w--] = nums1[p1--];
else nums1[w--] = nums2[p2--];
}
}
}
```