Valid Palindrome @ LeetCode (Python)
Letter Combinations of a Phone Number @ LeetCode (Python)

Sort Colors @ LeetCode (Python)

kitt posted @ 2014年3月02日 21:52 in LeetCode , 1833 阅读

要求只能扫一遍而且要in place, 只能通过交换A中的元素来实现。p0是指向0的指针, p2是指向2的指针, i是用于遍历的指针。如果当前元素A[i]是2, 则交换A[i]和A[p2]的值, 然后p2前移, i不动, 当i > p2就终止, 这样就排除了2的干扰,因为i前面的元素总是0或1。若A[i]是0, 交换A[i]和A[p0]的值, p0和i都后移, 若A[i]是1, 只要i后移即可, 换句话说, 总是把0往前放。

class Solution:
    # @param A a list of integers
    # @return nothing, sort in place
    def sortColors(self, A):
        if A == []: return
        length = len(A); 
        p0 = 0; p2 = length - 1
        i = 0
        while i <= p2:
            if A[i] == 2:
                A[p2], A[i] = A[i], A[p2]
                p2 -= 1
            elif A[i] == 0:
                A[p0], A[i] = A[i], A[p0]
                p0 += 1
                i += 1
            else:
                i += 1

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter