- 题目要求:
-
思路:
- 三个指针,一个指向头,一个是当前元素的指针,一个是尾
- 遍历数组,如果当前的元素为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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。