88. Merge Sorted Array

Two Pointers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int endIndex = nums1.length - 1;

int i = m - 1, j = n - 1;

while (i >= 0 && j >= 0) {
if (nums1[i] >= nums2[j]) {
nums1[endIndex] = nums1[i--];
} else {
nums1[endIndex] = nums2[j--];
}
endIndex--;
}

while (i >= 0) {
nums1[endIndex--] = nums1[i--];
}
while (j >= 0) {
nums1[endIndex--] = nums2[j--];
}
}
}

Two Pointers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
int curr = m + n - 1;
int index1 = m - 1, index2 = n - 1;

while (curr >= 0) {
int num1 = index1 >= 0 ? nums1[index1] : Integer.MIN_VALUE;
int num2 = index2 >= 0 ? nums2[index2] : Integer.MIN_VALUE;

// 注意较大值放末尾
if (num1 >= num2) {
nums1[curr] = num1;
index1--;
} else {
nums1[curr] = num2;
index2--;
}
curr--;
}
}
}

References

88. Merge Sorted Array