【LeetCode解题报告】75. Sort Colors

Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.

Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.

Note: You are not suppose to use the library's sort function for this problem.

Example:

Input: [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]

Follow up:

• A rather straight forward solution is a two-pass algorithm using counting sort.
First, iterate the array counting number of 0's, 1's, and 2's, then overwrite array with total number of 0's, then 1's and followed by 2's.
• Could you come up with a one-pass algorithm using only constant space?

现在有红色，白色，蓝色三种，分别用0，1，2表示，现在有一个表示这样的数组，然后请把它进行排序，使得相同颜色的在一起，并且整体按照0 1 2排序。

申请两枚指针，分别为头指针head和尾指针tail。

用 i 开始遍历数组，当 num[i] == 0时，交换当前位置和头指针处值，当 nums[i] == 2时，交换当前位置和尾指针处值，当 nums[i] == 1时，不进行交换。

class Solution(object):
def sortColors(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
head = 0
tail = len(nums) - 1
i = 0

while i <= tail :
if nums[i] == 0 :
nums[i], nums[head] = nums[head], nums[i]
head += 1
i += 1
elif nums[i] == 1 :
i += 1
elif nums[i] == 2 :
nums[i], nums[tail] = nums[tail], nums[i]
tail -= 1  

• 评论

• 上一篇
• 下一篇