1.题目
2.思路
思路很清晰:如果从0左边开始往右遍历,遇到0就扔到左边指针l处,遇到2就扔到右边指针r处,这里说的“扔”即交换两个元素的动作。
一定注意!
我们的前提是从左往右遍历,对于遇到0时两个下标都要改变,而遇到2时只用改变右指针下标。
当我们交换0时i是可以increment的,因为l指的位置只有可能是1,而我们遍历时无视1,然而将2换到右边时我们需要再次检查换过来的数字,所以不要increment i。
3.代码
class Solution(object): def sortColors(self, nums): """ :type nums: List[int] :rtype: None Do not return anything, modify nums in-place instead. """ n = len(nums) i = 0 l = 0 r = n - 1 while i <= r: if nums[i] == 0: nums[i], nums[l] = nums[l], nums[i] i += 1 l += 1 elif nums[i] == 2: nums[i], nums[r] = nums[r], nums[i] r -= 1 else: i += 1

