题目:
题目链接: https://leetcode-cn.com/problems/sort-colors/
解题思路:
双指针,一个指针初始化时指向数组头,一个指针指向数组尾,具体流程如下:
变量:
- left : 左指针,保存连续0的下一个位置
- right : 右指针,保存连续2的前一个位置
- index : 遍历时的索引
- nums : 原始数组
流程:
- 使用index从前向后nums
- 如果遇到0,则交换nums[index]和nums[left]的值,并将left、index向后移动1
- 如果遇到2,则交换nums[index]和nums[right]的值,注意这个时候因为nums[right]的原始值当前并未遍历过,所以只更新right的值,向前移动1
代码实现:
class Solution:
def sortColors(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
left, right = 0, len(nums) - 1
index = 0
while index <= right:
if nums[index] == 0:
nums[index], nums[left] = nums[left], nums[index]
left += 1
elif nums[index] == 2:
nums[index], nums[right] = nums[right], nums[index]
right -= 1
continue
index += 1