问题:
假设有一条绳子,上面有红,白,蓝三种颜色的旗子,起初绳子上的旗子颜色并没有顺序,您希望将之分类,并排列为蓝,白,红的顺序,要如何移动次数才会最少,注意您只能在绳子上进行这份动作,而且一次只能调换两个色旗子。
方法:
一开始b,w指向0索引,r指向最后一个索引
1 如果w指向蓝色 则交换b和w指向的值,同时,b,w加1
2 如果w指向白色,则w加1
3如果w指向红色 ,则交换w,r指向的值,同时r-1
python代码:
def colorflag(color):
r_flag=len(color)-1
w_flag=0
b_flag=0
while(w_flag<=r_flag):
if color[w_flag]=="b":
color[b_flag],color[w_flag]=color[w_flag],color[b_flag]
b_flag+=1
w_flag+=1
elif color[w_flag]=="w":
w_flag+=1
elif color[w_flag]=="r":
color[w_flag],color[r_flag]=color[r_flag],color[w_flag]
r_flag-=1
print(color)
if __name__ == '__main__':
color=['r','r','w','b','w','b','r']
colorflag(color)
#输出 ['b', 'b', 'w', 'w', 'r', 'r', 'r']