• 题目要求:

image.png

  • 思路:

    • 三个指针,一个指向头,一个是当前元素的指针,一个是尾
    • 遍历数组,如果当前的元素为0,而且当前的元素下标(当前的指针)大于头指针,把当前的值与头指针位置的值交换,头指针加一
    • 如果当前的元素为2,把当前的值与尾指针的值交换,尾指针减一
    • 其他(如果当前的值为1),当前指针加一
  • 核心代码:
# 起点和当前指针为0,结尾为数组长度减一
start , cur , end = 0 , 0 , len(nums) - 1
#遍历数组,当当前指针大于尾指针时,跳出循环
while cur <= end:
    #如果当前的值为2,把当前值与尾指针的值交换,尾指针减一
    if nums[cur] == 2:
        nums[end] , nums[cur] = nums[cur] , nums[end]
        end -= 1
    #如果当前的值为0,而且当前指针大于头指针,把当前的值与头指针指向的值交换,头指针加一
    elif start < cur and nums[cur] == 0:
        nums[start] , nums[cur] = nums[cur] , nums[start]
        start += 1
    #如果为1,当前指针加一
    else:
        cur += 1
return nums
  • 完整代码:
class Solution(object):
    def sortColors(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """

        start , cur , end = 0 , 0 , len(nums) - 1
        while cur <= end:
            if nums[cur] == 2:
                nums[end] , nums[cur] = nums[cur] , nums[end]
                end -= 1
            elif start < cur and nums[cur] == 0:
                nums[start] , nums[cur] = nums[cur] , nums[start]
                start += 1
            else:
                cur += 1
        return nums

Adrianna
1 声望2 粉丝