荷兰国旗问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了荷兰国旗问题相关的知识,希望对你有一定的参考价值。

#encoding:utf-8
_author_ = "Wang Wenchao"
#荷兰国旗问题   0放在左边,1放在中间,2放在右边
arr=[2,2,2,2,1,2,0,2,0,1,0]
#{}1,2,0,2,0,1,0{}
#用i遍历数组,是0区就和零区下一个交换,是2区就和2区前一个交换
def OneZeroTwo(arr):
    length=len(arr)
    if length==1 or not arr:
        return arr
    low=-1
    high=length
    i=0
    while i<high:
        if arr[i]==1:
            i+=1
        elif arr[i]==0:
            if i==low+1:
                low+=1
                i+=1
            else:
                arr[i],arr[low+1]=arr[low+1],arr[i]
                low+=1
        else:
            if i+1==high:
                high-=1
                i+=1#break
            else:
                arr[i],arr[high-1]=arr[high-1],arr[i]
                high-=1
    return arr
print OneZeroTwo(arr)

 

以上是关于荷兰国旗问题的主要内容,如果未能解决你的问题,请参考以下文章

荷兰国旗问题

算法荷兰国旗问题

荷兰国旗问题

图灵机上的荷兰国旗

NYOJ_268_荷兰国旗问题

编程之法:面试和算法心得(荷兰国旗)