题目
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。
例:
输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
方法:指针
- index 表示两个数字位置交换的其中一个位置
- 循环遍历数组 nums,将所有的红色(零)放到数组的前面
- 若该下标对应的数字为零,那么将该数字与 index 下标对应的数字交换位置,并且 index 向后移一位
- 循环遍历数组 nums,起始值为最后一个零的下一位,将所有白色(一)放到最后一个零后面
- 若该下标对应的数字为一,那么将该数字与 index 下标对应的数字交换位置,并且 index 向后移一位
class Solution(object):
def sortColors(self, nums):
index = 0
for i in range(len(nums)):
if nums[i] == 0:
nums[index], nums[i] = nums[i], nums[index]
index += 1
for i in range(index, len(nums)):
if nums[i] == 1:
nums[index], nums[i] = nums[i], nums[index]
index += 1
参考
代码相关:https://leetcode.cn/problems/sort-colors/solution/yan-se-fen-lei-by-leetcode-solution/
网友评论