Skip to content

Commit ead5005

Browse files
committed
update 88. Merge Sorted Array
1 parent 298b252 commit ead5005

File tree

3 files changed

+50
-7
lines changed

3 files changed

+50
-7
lines changed

88_MergeSortedArray.swift

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//
2+
// 88. 合并两个有序数组
3+
//
4+
// 题目链接:https://leetcode-cn.com/problems/merge-sorted-array/
5+
// 标签:数组、多指针
6+
// 要点:逆序遍历,避免拷贝增加不必要的空间复杂度
7+
// 注意使用双指针即可,以及避免用到 replaceSubrange(:with:)
8+
// 时间复杂度:O(M+N)
9+
// 空间复杂度:O(1)
10+
//
11+
12+
import Foundation
13+
14+
class Solution {
15+
func merge(_ nums1: inout [Int], _ m: Int, _ nums2: [Int], _ n: Int) {
16+
var p1 = m - 1, p2 = n - 1
17+
while p1 >= 0 || p2 >= 0 {
18+
if p2 < 0 || (p1 >= 0 && nums1[p1] > nums2[p2]) {
19+
nums1[p1 + p2 + 1] = nums1[p1]
20+
p1 -= 1
21+
} else {
22+
nums1[p1 + p2 + 1] = nums2[p2]
23+
p2 -= 1
24+
}
25+
}
26+
}
27+
}
28+
29+
// Tests
30+
let s = Solution()
31+
var nums1 = [1,2,3,0,0,0]
32+
s.merge(&nums1, 3, [2,5,6], 3)
33+
nums1

LeetCodePlayground.playground/Pages/88_MergeSortedArray.xcplaygroundpage/Contents.swift

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,30 @@
11
//: [Previous](@previous)
22

3+
//
4+
// 88. 合并两个有序数组
5+
//
6+
// 题目链接:https://leetcode-cn.com/problems/merge-sorted-array/
7+
// 标签:数组、多指针
8+
// 要点:逆序遍历,避免拷贝增加不必要的空间复杂度
9+
// 注意使用双指针即可,以及避免用到 replaceSubrange(:with:)
10+
// 时间复杂度:O(M+N)
11+
// 空间复杂度:O(1)
12+
//
13+
314
import Foundation
415

516
class Solution {
617
func merge(_ nums1: inout [Int], _ m: Int, _ nums2: [Int], _ n: Int) {
7-
var p1 = m - 1, p2 = n - 1, p = nums1.count - 1
8-
while p1 >= 0 && p2 >= 0 {
9-
if nums1[p1] > nums2[p2] {
10-
nums1[p] = nums1[p1]
18+
var p1 = m - 1, p2 = n - 1
19+
while p1 >= 0 || p2 >= 0 {
20+
if p2 < 0 || (p1 >= 0 && nums1[p1] > nums2[p2]) {
21+
nums1[p1 + p2 + 1] = nums1[p1]
1122
p1 -= 1
1223
} else {
13-
nums1[p] = nums2[p2]
24+
nums1[p1 + p2 + 1] = nums2[p2]
1425
p2 -= 1
1526
}
16-
p -= 1
1727
}
18-
nums1.replaceSubrange(..<(p2+1), with: nums2[..<(p2+1)])
1928
}
2029
}
2130

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ LeetCode 💖 Swift,攻克[数据结构](#数据结构)与[算法](#算法)。
3434
| [26. 删除排序数组中的重复项](https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/) | `数组` | 给定一个排序数组,你需要在[原地](http://baike.baidu.com/item/原地算法)删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 | [Swift](26_RemoveDuplicatesFromSortedArray.swift) |
3535
| [75. 颜色分类](https://leetcode-cn.com/problems/sort-colors/) | `数组` `排序` `双指针` | 给定一个包含红色、白色和蓝色,一共 *n* 个元素的数组,[原地](https://baike.baidu.com/item/原地算法)对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 | [Swift](75_SortColors.swift) |
3636
| [215. 数组中的第K个最大元素](https://leetcode-cn.com/problems/kth-largest-element-in-an-array/) | `数组` `排序` `多指针` | 在未排序的数组中找到第 **k** 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 | [Swift](215_FindKthLargestInAnArray.swift) |
37+
| [88. 合并两个有序数组](https://leetcode-cn.com/problems/merge-sorted-array/) | `数组` `双指针` | 给定两个有序整数数组 *nums1**nums2*,将 *nums2* 合并到 *nums1***使得 *num1* 成为一个有序数组。 | [Swift](./88_MergeSortedArray.swift) |
3738

3839

3940

0 commit comments

Comments
 (0)