今天給你們總結幾道算法題,其中用到了一些不經常使用的技巧,但願你們和我同樣,也能收穫一些新東西。python
有一個集合,其任意一個元素的對稱元素也必定存在於這個集合中,現隨機取出一個元素,求這個元素是誰算法
s = {2, 4, 6, -6, -4, -2} s1 = s.copy() s1.pop() # 這裏就是刪除一個元素,再刪除一個同樣的操做 el = (s - s1)
s = {2, 4, 6, -6, -4, -2} s1.pop() el = sum(s)*-1 # 根據對稱特性,相加等於零,那麼就這麼解答出來了
親測了一下兩個的執行效率,幾乎是差很少的,不過求差集還會更快些。編程
在一個列表中只有一個元素存在次數爲1,其餘都爲2,求這個元素app
l = [1,2,1,3,4,5,3,4,5] from functools import reduce reduce(lambda x,y:x^y, l)
一層樓有10級臺階,能夠1次1級,2級,或3級的方式上樓,請問走完這10級臺階有幾種方式?編程語言
# 這段代碼來自我加入的一個交流羣的羣友 l = [1,1,2] for i in range(3,11): l.append(l[i-1]+l[i-2]+l[i-3]) # 這種思惟是否是和斐波那契相似呢,大家能夠對比一下 l[10] # 274
某次戰役中,爲便於信息交互,我軍偵察部門將這次戰役的關鍵高地座標設定爲(x=0,y=0)並規定,每向東增長100米,x加1,每向北增長100米,y加1。同時,我軍情報部門也破譯了敵軍向坦克發送的指揮信號,其中有三種信號(L,R,M)用於控制坦克的運動,L 和 R 分別表示使令坦克向左、向右轉向,M 表示令坦克直線開進100米,其它信號如T用於時間同步,P用於反轉信號,既出現p,後面的信號向左變爲向右,向右變爲向左,向前變爲向後,反之亦然。一日,我軍偵察兵發現了敵軍的一輛坦克,偵察兵當即將坦克所在座標(P, Q)及坦克前進方向(W:西,E:東,N:北,S:南)發送給指揮部,同時啓動信號接收器,將坦克接收到的信號實時同步發往指揮部,指揮部根據這些信息得以實時掌控了該坦克的位置,並使用榴彈炮精準地擊毀了該坦克。假設,偵察兵發送給指揮部的信息以下:坦克座標:(11,39)坦克運行方向:W,坦克接收到的信號爲:MTMPRPMTMLMRPRMTPLMMTLMRRMP,請經過編程計算出坦克所在的位置(編程語言不限)。函數
# 這段代碼來自我加入的一個交流羣的羣友 import numpy class Tan(): def __init__(self, x, y, w): w_type = {'E': 0, 'S': 1, 'W': 2, 'N': 3} self.point = numpy.array((x, y)) self.w = w_type.get(w) self.c_type = [ numpy.array((1, 0)), numpy.array((0, -1)), numpy.array((-1, 0)), numpy.array((0, 1)), ] self.P = 1 self.t = (self.x,self.y) def command(self, c): if c == 'R': self.w = (self.w + self.P) & 3 elif c == 'L': self.w = (self.w - self.P) & 3 elif c == 'M': self.point += (self.c_type[self.w] * self.P) elif c == 'P': self.P *= -1 elif c == 'T': self.t=(self.x,self,y) def l_command(self, lc): for c in lc: self.command(c) if __name__ == "__main__": tan = Tan(11, 39, 'W') tan.l_command('MTMPRPMTMLMRPRMTPLMMTLMRRMPTMMMMTP') print(tan.t)
經過每一個題都讓我學到了一種思惟,很不錯,有些問題咱們須要更多的去思索,查找最優方式,這樣才能鍛鍊咱們的大腦,一塊兒加油。code