18 lines
983 B
Markdown
18 lines
983 B
Markdown
Leetcode #88 | #Easy | [[Два указателя]] | [[Указатель на запись]]
|
|
## Идея
|
|
Три указателя, сливаем с конца. Первый указатель на конец первого 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--];
|
|
}
|
|
}
|
|
}
|
|
``` |