leetcode第75题,打乱的0,1,2排序
可以先用计数排序,由于只有0,1,2这三个数字,因此完全可以先统计各有多少个,然后在数组中重写一遍即可。
class Solution:
def sortColors(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
d = [0, 0, 0]
for num in nums:
d[num] += 1
print(d)
start = 0
for index, count in enumerate(d):
print(start)
for i in range(count):
nums[start+i] = index
start += count
one-pass的过程参考了师兄的博客,主要思路是设置三个指针,left指向第一个1的元素,right指向最后一个非2的元素,i作游标。遍历的时候,发现0就和left交换,left和i指针前移,1的时候i指针前移,2的时候和right交换,注意这里有一个坑,i要不要前移,因为现在right交换过去之后可能是0或者是1,如果是0还需要判断。