From 1023737d597eae95999c8a9224b2e9940ebc0cd8 Mon Sep 17 00:00:00 2001 From: ShusenTang Date: Tue, 3 Dec 2019 23:07:35 +0800 Subject: [PATCH] Update 75. Sort Colors.md --- solutions/75. Sort Colors.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/solutions/75. Sort Colors.md b/solutions/75. Sort Colors.md index 3f4091c..eba57cc 100644 --- a/solutions/75. Sort Colors.md +++ b/solutions/75. Sort Colors.md @@ -3,7 +3,12 @@ 将一个只包含三种元素的数组进行排序,要求只能遍历一遍,不能使用桶排序(需要两次遍历)。 其实这题就是学习数据结构快排时可能遇到的"[荷兰国旗问题](https://en.wikipedia.org/wiki/Dutch_national_flag_problem)",可以用快排类似的partition的方法求解。 定义两个指针`right_0`和`left_2`初始分别为`-1`和`nums.size()`。始终满足`right_0`及其左边的元素全为0、`left_2`及其右边的元素全为2。 -从前往后遍历数组,将0放在位置`right_0 + 1`(通过swap完成,下同)并更新`right_0`, 将2放在位置`left_2 - 1`并更新`left_2`,遍历完成后即所有的0都在左边,所有的2都在右边,中间全为1。 +从前往后遍历数组,将0放在位置`right_0 + 1`(通过swap完成,下同)并更新`right_0`, 将2放在位置`left_2 - 1`并更新`left_2`,遍历完成后即所有的0都在左边,所有的2都在右边,中间全为1。 + +注意: + +**代码中最后`else`那里不更新`i`!!! 因为可能交换后`nums[i]=0`,需要在下一次循环中再次交换** + 时间复杂度O(n),空间复杂度O(1) # C++