在编程珠玑学到了“翻掌算法”
就是我们试一下十元数组向上旋转5个位置的例子。
初始时掌心对着我们的脸,左手在右手上边,先将左手反转(掌心朝外,掌背朝我们的脸),再将右手翻转(同左手),最后两只手同时翻转,大家可以自己实验一下,挺有趣的。
下边放一下代码:
def ReversalList(list): l = 0; r = len(list) - 1; while(l < r): list[l], list[r] = list[r], list[l]; l += 1; r -= 1; return list;def LeftReverseList(list, n): LeftList = ReversalList(list[0 : n]); RightList = ReversalList(list[n : len(list)]); return ReversalList(LeftList + RightList);def LeftReverseListTest(Max): count = 0; for i in range(0,Max): list = []; for j in range(0,i): list.append(random.randint(-int(Max / 2), int(Max / 2))); test = random.randint(0, i); NewList = LeftReverseList(list, test); PRint(test); print(list); print(NewList); if (list != LeftReverseList(NewList, i - test)): print(list); print(i, ':error/n'); else: count += 1; if (count == Max): print('allright'); return count;if __name__ == '__main__': Max = 10; LeftReverseListTest(Max);我们甚至可以对两端同时翻转,这样能大大提升速度。
新闻热点
疑难解答