【leetcode系列】【算法】【中等】颜色分类

题目:

题目链接: https://leetcode-cn.com/problems/sort-colors/

解题思路:

双指针,一个指针初始化时指向数组头,一个指针指向数组尾,具体流程如下:

变量:

  1. left : 左指针,保存连续0的下一个位置
  2. right : 右指针,保存连续2的前一个位置
  3. index : 遍历时的索引
  4. nums : 原始数组

流程:

  1. 使用index从前向后nums
  2. 如果遇到0,则交换nums[index]和nums[left]的值,并将left、index向后移动1
  3. 如果遇到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
发布了100 篇原创文章 · 获赞 4 · 访问量 1487

猜你喜欢

转载自blog.csdn.net/songyuwen0808/article/details/105258083
今日推荐