您的位置:首页 > 编程语言 > Python开发

leetcode.array--75. Sort Colors

2017-10-28 20:31 423 查看
题目:75. Sort Colors

题目链接:https://leetcode.com/problems/sort-colors/description/

这个是比较经典的荷兰国旗问题了,用0,1,2分别代表red, white, and blue,要求遍历一遍完成排序,即将所有的0放在前面,1放在中间,2放在最后。去年考研时,王道上面也有这个题目。

设置指针begin=0和end=len(nums),以及当前扫描位置指针cur。有下面三种情况:

1.nums[cur]==0,此时说明该元素应该在数组的前一部分,故与nums[begin]交换。且交换之后begin之前的元素已经排好,因此begin++,cur++。

2.nums[cur]==1,说明当前元素应该处于数组的中部,cur++后不做处理。

3.nums[cur]==2,说明当前元素应该在数组的后部,故与nums[end]交换。交换后end--,cur不变(因为不确定交换到前面的元素是多少,可能会有疑问:为啥第一步就可以cur++?哈哈自己想去吧)。

Python:

class Solution(object):
def sortColors(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
begin,end=0,len(nums)-1
if begin==end:
return
cur=begin
while begin<=end and cur<=end:
if nums[cur]==1:
cur+=1
continue
elif nums[cur]==0:
nums[cur],nums[begin]=nums[begin],nums[cur]
cur+=1
begin+=1
continue
else:
nums[cur],nums[end]=nums[end],nums[cur]
end -= 1
continue
return
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode python array