leetcode -- Sort Colors -- 重点,排序,two pointers

来源:互联网 发布:格里芬体侧数据 编辑:程序博客网 时间:2024/06/20 01:35

https://leetcode.com/problems/sort-colors/

思路就是用指针i 指向0,代表当前待赋值的0的index,用指针j指向len(nums) - 1, 代表当前待赋值的2的index。然后用k来扫一遍数组,如果遇到0则跟i交换,如果遇到2则跟j交换,跟quick sort有点像。

里面有很多细节要注意

class Solution:    # @param A a list of integers    # @return nothing, sort in place    # @should learn another algorithm    def sortColors(self, A):        if A == []: return         p0 = 0; p2 = len(A) - 1; i = 0        while i <= p2:#注意这里是到p2为止            if A[i] == 2:#注意这里没有i+=1,因为换过来的A[p2]可能是0,所以不要i+=1                A[i], A[p2] = A[p2], A[i]                p2 -= 1            elif A[i] == 0:                A[i], A[p0] = A[p0], A[i]                p0 += 1                i += 1#要注意这里有i += 1, 因为换过来的不可能是2,一般是1.假设输入数组开头已经都是0,如果不i+=1,那么i就不能向前走。还有一个原因是当A[i] == 0的时候,A[i]与A[p0]交换只可能换回1,或者0,不可能换回2,因为A[i]前面都是0或者1,如果有2的话,早就已经被换走了。还有个例子就是[0,0,1,0,2],这个时候当i指向第三个0的时候,p0其实已经指向了1,而不是一开始的0.            else:#如果A[i] == 1, 那么向前走                i += 1

参考:
http://www.cnblogs.com/zuoyuan/p/3775832.html

0 0
原创粉丝点击