###75. Sort Colors
题目: https://leetcode.com/problems/sort-colors/
难度:
Medium
思路:
这个问题是 Dutch National Flag Problem, 荷兰旗问题 https://en.wikipedia.org/wiki/Dutch_national_flag_problem
思路其实是类似partition的,比x小的放左边,比x大的放右边。
这里是用三个指针,begin, cur, end,cur需要遍历整个数组
- cur 指向0,交换begin与cur, begin++,cur++
- cur 指向1,不做任何交换,cur++
- cur 指向2,交换end与cur,end--
之所以cur指向2,交换之后不前进是因为我们不知道end此时指向的元素是几,如果交换过来的是0或者1,那么明显我们需要做进一步的处理,所以最终判断条件是end =< cur应该就结束了
这样的three-way-partition也只是3-way好用吧?如果有4个数,那么这样则是无效的,或者如果是4-way,那么可以转换成3-way+2-way
class Solution(object):
def sortColors(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
begin,cur,end = 0,0,len(nums) - 1
while cur <= end:
if nums[cur] == 0:
nums[begin],nums[cur] = nums[cur],nums[begin]
cur += 1
begin += 1
elif nums[cur] == 1:
cur += 1
else: # nums[cur] == 2
nums[cur],nums[end] = nums[end],nums[cur]
end -=1