mirror of
https://github.com/chefyuan/algorithm-base.git
synced 2025-08-03 22:41:58 +00:00
为数组篇 增加 Swift 实现
This commit is contained in:
@@ -96,6 +96,38 @@ class Solution:
|
||||
nums[j] = temp
|
||||
```
|
||||
|
||||
Swift Code:
|
||||
|
||||
```swift
|
||||
class Solution {
|
||||
func sortColors(_ nums: inout [Int]) {
|
||||
|
||||
let count = nums.count
|
||||
var left = 0, i = left, right = count - 1
|
||||
while i <= right {
|
||||
if nums[i] == 2 {
|
||||
//nums.swapAt(i, right) 直接调用系统方法
|
||||
self.swap(&nums, i, right) // 保持风格统一走自定义交换
|
||||
right -= 1
|
||||
} else if nums[i] == 0 {
|
||||
//nums.swapAt(i, left) 直接调用系统方法
|
||||
self.swap(&nums, i, left) // 保持风格统一走自定义交换
|
||||
i += 1
|
||||
left += 1
|
||||
} else {
|
||||
i += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func swap(_ nums: inout [Int], _ i: Int, _ j: Int) {
|
||||
let temp = nums[i]
|
||||
nums[i] = nums[j]
|
||||
nums[j] = temp
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
另外我们看这段代码,有什么问题呢?那就是我们即使完全符合时,仍会交换元素,这样会大大降低我们的效率。
|
||||
|
||||
例如:[0,0,0,1,1,1,2,2,2]
|
||||
@@ -174,4 +206,39 @@ class Solution:
|
||||
temp = nums[i]
|
||||
nums[i] = nums[j]
|
||||
nums[j] = temp
|
||||
```
|
||||
|
||||
Swift Code:
|
||||
|
||||
```swift
|
||||
class Solution {
|
||||
func sortColors(_ nums: inout [Int]) {
|
||||
|
||||
let count = nums.count
|
||||
var left = 0, i = left, right = count - 1
|
||||
while i <= right {
|
||||
if nums[i] == 0 {
|
||||
//nums.swapAt(i, left) 直接调用系统方法
|
||||
self.swap(&nums, i, left) // 保持风格统一走自定义交换
|
||||
left += 1
|
||||
}
|
||||
if nums[i] == 2 {
|
||||
//nums.swapAt(i, right) 直接调用系统方法
|
||||
self.swap(&nums, i, right) // 保持风格统一走自定义交换
|
||||
right -= 1
|
||||
//如果不等于 1 则需要继续判断,所以不移动 i 指针,i--
|
||||
if nums[i] != 1 {
|
||||
i -= 1
|
||||
}
|
||||
}
|
||||
i += 1
|
||||
}
|
||||
}
|
||||
|
||||
func swap(_ nums: inout [Int], _ i: Int, _ j: Int) {
|
||||
let temp = nums[i]
|
||||
nums[i] = nums[j]
|
||||
nums[j] = temp
|
||||
}
|
||||
}
|
||||
```
|
Reference in New Issue
Block a user