给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:
不能使用代码库中的排序函数来解决这道题。
示例:
输入: [2,0,2,1,1,0] 输出: [0,0,1,1,2,2]
我的:思路就是遍历数组,遇到前面的数大于后面的数的话,两个数交换位置。
执行用时 : 72 ms, 在Sort Colors的Python3提交中击败了28.12% 的用户
内存消耗 : 13 MB, 在Sort Colors的Python3提交中击败了95.56% 的用户
class Solution:
def sortColors(self, nums):
"""
Do not return anything, modify nums in-place instead.
"""
while not self.fun(nums):
for i in range(len(nums)-1):
if nums[i+1] <= nums[i]:
a = nums[i]
nums[i] = nums[i+1]
nums[i+1] = a
print(nums)
def fun(self,nums):
if len(nums) == 1:
return True
else:
for i in range(len(nums)-1):
if i == len(nums)-2 and nums[i+1] >= nums[i]:
return True
elif nums[i+1] >= nums[i] and i != len(nums)-2:
continue
else:
return False
s = Solution()
res = s.sortColors([2,0,2,1,1,0])
#print(res)
大佬的:思路就是三路快排,维护两个区域,一个是0区域,一个是2区域,而1的区域就不用管了,因为0,2的确定了,1的就自然确定了。
class Solution(object):
def sortColors(self,nums):
l_point = -1
r_point = len(nums)
i = 0
while i < len(nums) and i < r_point:
if nums[i] == 0 and i > l_point:
l_point += 1
nums[l_point],nums[i] = nums[i],nums[l_point]
elif nums[i] == 2:
r_point -= 1
nums[r_point],nums[i] = nums[i],nums[r_point]
else:
i += 1
return nums