-
Notifications
You must be signed in to change notification settings - Fork 345
/
Copy path合并两个有序数组.js
122 lines (100 loc) · 2.17 KB
/
合并两个有序数组.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
88. 合并两个有序数组
给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 num1 成为一个有序数组。
说明:
初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。
你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。
示例:
输入:
nums1 = [1,2,10,0,0,0], m = 3
nums2 = [2,5,6,7], n = 3
输出: [1,2,2,3,5,6]
*/
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
const merge = function(nums1, m, nums2, n) {
let i = m - 1
let j = n - 1
// 尾部指针
let k = nums1.length - 1
while (j >= 0) {
let n1 = nums1[i]
let n2 = nums2[j]
if (n1 > n2) {
nums1[k] = n1
k--
i--
} else {
nums1[k] = n2
k--
j--
}
}
}
let a = [1, 2, 10, 0, 0, 0]
merge(a, 3, [2, 5, 6, 7], 4)
console.log(a)
/**
[1,2,10,0,0,0,0]
↑
[2,5,6,7]
↑
[1,2,10,0,0,0,+10]
↑
[2,5,6,7]
↑
[1,2,10,0,0,+7,10]
↑
[2,5,6,7]
↑
[1,2,10,0,+6,7,10]
↑
[2,5,6,7]
↑
[1,2,0,+5,6,7,10]
↑
[2,5,6,7]
↑
[1,2,+2,5,6,7,10]
↑
[2,5,6,7]
指针移动完毕
*/
/**
* @param {number[]} nums1
* @param {number} m
* @param {number[]} nums2
* @param {number} n
* @return {void} Do not return anything, modify nums1 in-place instead.
*/
const merge2 = function(nums1, m, nums2, n) {
// 初始化两个指针的指向,初始化 nums1 尾部索引k
let i = m - 1, j = n - 1, k = m + n - 1
// 当两个数组都没遍历完时,指针同步移动
while(i >= 0 && j >= 0) {
// 取较大的值,从末尾往前填补
if(nums1[i] >= nums2[j]) {
nums1[k] = nums1[i]
i--
k--
} else {
nums1[k] = nums2[j]
j--
k--
}
}
// nums2 留下的情况,特殊处理一下
while(j>=0) {
nums1[k] = nums2[j]
k--
j--
}
};
let a2= [1, 2, 0, 0, 0, 0]
merge(a2, 2, [2, 5, 6], 4)
console.log(a2)