Skip to content

Commit ffc95a9

Browse files
committed
feat: add solutions to lc problem: No.0088
No.0088.Merge Sorted Array
1 parent ea3aa94 commit ffc95a9

File tree

8 files changed

+129
-129
lines changed

8 files changed

+129
-129
lines changed

solution/0000-0099/0088.Merge Sorted Array/README.md

Lines changed: 48 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,13 @@
6262

6363
<!-- 这里可写通用的实现逻辑 -->
6464

65-
双指针解决。
65+
**方法一:双指针**
66+
67+
我们用两个指针 $i$ 和 $j$ 分别指向两个数组的末尾,用一个指针 $k$ 指向合并后的数组的末尾。
68+
69+
每次比较两个数组的末尾元素,将较大的元素放在合并后的数组的末尾,然后将指针向前移动一位,重复这个过程,直到两个数组的指针都指向了数组的开头。
70+
71+
时间复杂度 $O(m + n)$,其中 $m$ 和 $n$ 分别是两个数组的长度。空间复杂度 $O(1)$。
6672

6773
<!-- tabs:start -->
6874

@@ -73,10 +79,8 @@
7379
```python
7480
class Solution:
7581
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
76-
"""
77-
Do not return anything, modify nums1 in-place instead.
78-
"""
79-
i, j, k = m - 1, n - 1, m + n - 1
82+
k = m + n - 1
83+
i, j = m - 1, n - 1
8084
while j >= 0:
8185
if i >= 0 and nums1[i] > nums2[j]:
8286
nums1[k] = nums1[i]
@@ -87,56 +91,58 @@ class Solution:
8791
k -= 1
8892
```
8993

90-
```python
91-
class Solution:
92-
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
93-
"""
94-
Do not return anything, modify nums1 in-place instead.
95-
"""
96-
i, j, k = m - 1, n - 1, m + n - 1
97-
while j >= 0:
98-
if i < 0 or nums1[i] < nums2[j]:
99-
nums1[k] = nums2[j]
100-
j -= 1
101-
else:
102-
nums1[k] = nums1[i]
103-
i -= 1
104-
k -= 1
105-
```
106-
10794
### **Java**
10895

10996
<!-- 这里可写当前语言的特殊实现逻辑 -->
11097

11198
```java
11299
class Solution {
113100
public void merge(int[] nums1, int m, int[] nums2, int n) {
114-
int i = m - 1, j = n - 1, k = m + n - 1;
115-
while (j >= 0) {
116-
if (i >= 0 && nums1[i] > nums2[j]) {
117-
nums1[k--] = nums1[i--];
118-
} else {
119-
nums1[k--] = nums2[j--];
120-
}
101+
for (int i = m - 1, j = n - 1, k = m + n - 1; j >= 0; --k) {
102+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
121103
}
122104
}
123105
}
124106
```
125107

108+
### **C++**
109+
110+
```cpp
111+
class Solution {
112+
public:
113+
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
114+
for (int i = m - 1, j = n - 1, k = m + n - 1; ~j; --k) {
115+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
116+
}
117+
}
118+
};
119+
```
120+
126121
### **Go**
127122
128123
```go
129-
func merge(nums1 []int, m int, nums2 []int, n int) {
130-
i, j, k := m - 1, n - 1, m + n - 1
131-
for j >= 0 {
132-
if i >= 0 && nums1[i] > nums2[j] {
133-
nums1[k] = nums1[i]
134-
i--
135-
} else {
136-
nums1[k] = nums2[j]
137-
j--
138-
}
139-
k--
124+
func merge(nums1 []int, m int, nums2 []int, n int) {
125+
for i, j, k := m-1, n-1, m+n-1; j >= 0; k-- {
126+
if i >= 0 && nums1[i] > nums2[j] {
127+
nums1[k] = nums1[i]
128+
i--
129+
} else {
130+
nums1[k] = nums2[j]
131+
j--
132+
}
133+
}
134+
}
135+
```
136+
137+
### **TypeScript**
138+
139+
```ts
140+
/**
141+
Do not return anything, modify nums1 in-place instead.
142+
*/
143+
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
144+
for (let i = m - 1, j = n - 1, k = m + n - 1; j >= 0; --k) {
145+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
140146
}
141147
}
142148
```
@@ -152,15 +158,8 @@ func merge(nums1 []int, m int, nums2 []int, n int) {
152158
* @return {void} Do not return anything, modify nums1 in-place instead.
153159
*/
154160
var merge = function (nums1, m, nums2, n) {
155-
let i = m - 1,
156-
j = n - 1,
157-
k = m + n - 1;
158-
while (j >= 0) {
159-
if (i >= 0 && nums1[i] > nums2[j]) {
160-
nums1[k--] = nums1[i--];
161-
} else {
162-
nums1[k--] = nums2[j--];
163-
}
161+
for (let i = m - 1, j = n - 1, k = m + n - 1; j >= 0; --k) {
162+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
164163
}
165164
};
166165
```

solution/0000-0099/0088.Merge Sorted Array/README_EN.md

Lines changed: 49 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -55,17 +55,23 @@ Note that because m = 0, there are no elements in nums1. The 0 is only there to
5555

5656
## Solutions
5757

58+
**Approach 1: Two Pointers**
59+
60+
We use two pointers $i$ and $j$ pointing to the end of two arrays, and a pointer $k$ pointing to the end of the merged array.
61+
62+
Every time we compare the two elements at the end of the two arrays, and move the larger one to the end of the merged array. Then we move the pointer one step forward, and repeat this process until the two pointers reach the start of the arrays.
63+
64+
The time complexity is $O(m + n)$, where $m$ and $n$ are the lengths of two arrays. The space complexity is $O(1)$.
65+
5866
<!-- tabs:start -->
5967

6068
### **Python3**
6169

6270
```python
6371
class Solution:
6472
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
65-
"""
66-
Do not return anything, modify nums1 in-place instead.
67-
"""
68-
i, j, k = m - 1, n - 1, m + n - 1
73+
k = m + n - 1
74+
i, j = m - 1, n - 1
6975
while j >= 0:
7076
if i >= 0 and nums1[i] > nums2[j]:
7177
nums1[k] = nums1[i]
@@ -76,54 +82,56 @@ class Solution:
7682
k -= 1
7783
```
7884

79-
```python
80-
class Solution:
81-
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
82-
"""
83-
Do not return anything, modify nums1 in-place instead.
84-
"""
85-
i, j, k = m - 1, n - 1, m + n - 1
86-
while j >= 0:
87-
if i < 0 or nums1[i] < nums2[j]:
88-
nums1[k] = nums2[j]
89-
j -= 1
90-
else:
91-
nums1[k] = nums1[i]
92-
i -= 1
93-
k -= 1
94-
```
95-
9685
### **Java**
9786

9887
```java
9988
class Solution {
10089
public void merge(int[] nums1, int m, int[] nums2, int n) {
101-
int i = m - 1, j = n - 1, k = m + n - 1;
102-
while (j >= 0) {
103-
if (i >= 0 && nums1[i] > nums2[j]) {
104-
nums1[k--] = nums1[i--];
105-
} else {
106-
nums1[k--] = nums2[j--];
107-
}
90+
for (int i = m - 1, j = n - 1, k = m + n - 1; j >= 0; --k) {
91+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
10892
}
10993
}
11094
}
11195
```
11296

97+
### **C++**
98+
99+
```cpp
100+
class Solution {
101+
public:
102+
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
103+
for (int i = m - 1, j = n - 1, k = m + n - 1; ~j; --k) {
104+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
105+
}
106+
}
107+
};
108+
```
109+
113110
### **Go**
114111
115112
```go
116-
func merge(nums1 []int, m int, nums2 []int, n int) {
117-
i, j, k := m - 1, n - 1, m + n - 1
118-
for j >= 0 {
119-
if i >= 0 && nums1[i] > nums2[j] {
120-
nums1[k] = nums1[i]
121-
i--
122-
} else {
123-
nums1[k] = nums2[j]
124-
j--
125-
}
126-
k--
113+
func merge(nums1 []int, m int, nums2 []int, n int) {
114+
for i, j, k := m-1, n-1, m+n-1; j >= 0; k-- {
115+
if i >= 0 && nums1[i] > nums2[j] {
116+
nums1[k] = nums1[i]
117+
i--
118+
} else {
119+
nums1[k] = nums2[j]
120+
j--
121+
}
122+
}
123+
}
124+
```
125+
126+
### **TypeScript**
127+
128+
```ts
129+
/**
130+
Do not return anything, modify nums1 in-place instead.
131+
*/
132+
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
133+
for (let i = m - 1, j = n - 1, k = m + n - 1; j >= 0; --k) {
134+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
127135
}
128136
}
129137
```
@@ -139,15 +147,8 @@ func merge(nums1 []int, m int, nums2 []int, n int) {
139147
* @return {void} Do not return anything, modify nums1 in-place instead.
140148
*/
141149
var merge = function (nums1, m, nums2, n) {
142-
let i = m - 1,
143-
j = n - 1,
144-
k = m + n - 1;
145-
while (j >= 0) {
146-
if (i >= 0 && nums1[i] > nums2[j]) {
147-
nums1[k--] = nums1[i--];
148-
} else {
149-
nums1[k--] = nums2[j--];
150-
}
150+
for (let i = m - 1, j = n - 1, k = m + n - 1; j >= 0; --k) {
151+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
151152
}
152153
};
153154
```
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
class Solution {
2+
public:
3+
void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
4+
for (int i = m - 1, j = n - 1, k = m + n - 1; ~j; --k) {
5+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
6+
}
7+
}
8+
};
Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1-
func merge(nums1 []int, m int, nums2 []int, n int) {
2-
i, j, k := m - 1, n - 1, m + n - 1
3-
for j >= 0 {
4-
if i >= 0 && nums1[i] > nums2[j] {
5-
nums1[k] = nums1[i]
6-
i--
7-
} else {
8-
nums1[k] = nums2[j]
9-
j--
10-
}
11-
k--
12-
}
1+
func merge(nums1 []int, m int, nums2 []int, n int) {
2+
for i, j, k := m-1, n-1, m+n-1; j >= 0; k-- {
3+
if i >= 0 && nums1[i] > nums2[j] {
4+
nums1[k] = nums1[i]
5+
i--
6+
} else {
7+
nums1[k] = nums2[j]
8+
j--
9+
}
10+
}
1311
}
Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
class Solution {
22
public void merge(int[] nums1, int m, int[] nums2, int n) {
3-
int i = m - 1, j = n - 1, k = m + n - 1;
4-
while (j >= 0) {
5-
if (i >= 0 && nums1[i] > nums2[j]) {
6-
nums1[k--] = nums1[i--];
7-
} else {
8-
nums1[k--] = nums2[j--];
9-
}
3+
for (int i = m - 1, j = n - 1, k = m + n - 1; j >= 0; --k) {
4+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
105
}
116
}
127
}

solution/0000-0099/0088.Merge Sorted Array/Solution.js

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,7 @@
66
* @return {void} Do not return anything, modify nums1 in-place instead.
77
*/
88
var merge = function (nums1, m, nums2, n) {
9-
let i = m - 1,
10-
j = n - 1,
11-
k = m + n - 1;
12-
while (j >= 0) {
13-
if (i >= 0 && nums1[i] > nums2[j]) {
14-
nums1[k--] = nums1[i--];
15-
} else {
16-
nums1[k--] = nums2[j--];
17-
}
9+
for (let i = m - 1, j = n - 1, k = m + n - 1; j >= 0; --k) {
10+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
1811
}
1912
};

solution/0000-0099/0088.Merge Sorted Array/Solution.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
class Solution:
22
def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -> None:
3-
"""
4-
Do not return anything, modify nums1 in-place instead.
5-
"""
6-
i, j, k = m - 1, n - 1, m + n - 1
3+
k = m + n - 1
4+
i, j = m - 1, n - 1
75
while j >= 0:
86
if i >= 0 and nums1[i] > nums2[j]:
97
nums1[k] = nums1[i]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/**
2+
Do not return anything, modify nums1 in-place instead.
3+
*/
4+
function merge(nums1: number[], m: number, nums2: number[], n: number): void {
5+
for (let i = m - 1, j = n - 1, k = m + n - 1; j >= 0; --k) {
6+
nums1[k] = i >= 0 && nums1[i] > nums2[j] ? nums1[i--] : nums2[j--];
7+
}
8+
}

0 commit comments

Comments
 (0)