在編程珠璣學到了“翻掌算法”
就是我們試一下十元數組向上旋轉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);我們甚至可以對兩端同時翻轉,這樣能大大提升速度。
新聞熱點
疑難解答