算法

單例模式

# -*- coding: utf-8 -*-


class Singleton(object):
    _instance = {}

    def __call__(cls, *args, **kwargs):
        if cls not in Singleton._instance:
            Singleton._instance[cls] = type.__call__(cls, *args, **kwargs)
        return Singleton._instance[cls]


class Singleton2(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, '_instance'):
           cls._instance = super(Singleton2, cls).__new__(cls, *args, **kwargs)
        return cls._instance


def singleton(cls, *args, **kwargs):
    instance = {}

    def wrapper():
        if cls not in instance:
            instance[cls] = cls(*args, **kwargs)
        return instance[cls]
    return wrapper

生產(chǎn)者消費(fèi)者

# -*- coding: utf-8 -*-
import time
from threading import Thread, Condition


class Producer(Thread):
    def run(self):
        global count
        while True:
            if con.acquire():
                if count > 1000:
                    con.wait()
                else:
                    count += 100
                    print self.name + " prudce 100, count = " + str(count)
                    con.notify()
                con.release()
            time.sleep(1)


class Consumer(Thread):
    def run(self):
        global count
        while True:
            if con.acquire():
                if count < 100:
                    con.wait()
                else:
                    count -= 3
                    print self.name + " Consumer 3, count = " + str(count)
                    con.notify()
                con.release()
            time.sleep(1)


if __name__ == "__main__":
    count = 500
    con = Condition()

    for i in range(2):
        p = Producer()
        p.start()

    for i in range(5):
        c = Consumer()
        c.start()

二分查找

# -*- coding: utf-8 -*-


def binarySearch(l, t):
    low, high = 0, len(l) - 1
    while low < high:
        mid = (low + high) / 2
        if l[mid] > t:
            high = mid
        elif l[mid] < t:
            low = mid + 1
        else:
            return mid
    return -1 

if __name__ == '__main__':
    l = [1, 4, 12, 45, 66, 99, 120, 444]
    print binarySearch(l, 99)

斐波那契

def fib(n):
    a, b = 0, 1
    for _ in xrange(n):
        a, b = b, a + b
    return b

fib2 = lambda n: n if n <= 2 else fib2(n - 1) + fib2(n - 2)

合并有序列表

# -*- coding: utf-8 -*-


def _recursion_merge_sort2(l1, l2, tmp):
    if len(l1) == 0 or len(l2) == 0:
        tmp.extend(l1)
        tmp.extend(l2)
        return tmp
    else:
        if l1[0] < l2[0]:
            tmp.append(l1[0])
            del l1[0]
        else:
            tmp.append(l2[0])
            del l2[0]
        return _recursion_merge_sort2(l1, l2, tmp)


def recursion_merge_sort2(l1, l2):
    return _recursion_merge_sort2(l1, l2, [])

冒泡

# -*- coding: utf-8 -*-


def bubbleSort(lists):
    count = len(lists)
    for i in range(0, count):
        for j in range(i + 1, count):
            if lists[i] > lists[j]:
                lists[i], lists[j] = lists[j], lists[i]
    return lists

插入排序

# -*- coding: utf-8 -*-


def insert_sort(lists):
    count = len(lists)
    for i in range(1, count):
        key = lists[i]
        j = i - 1
        while j >= 0:
            if lists[j] > key:
                lists[j + 1] = lists[j]
                lists[j] = key
            j -= 1
    return lists

快排

# -*- coding: utf-8 -*-


def qsort(seq):
    if seq == []:
        return []
    else:
        pivot = seq[0]
        lesser = qsort([x for x in seq[1:] if x < pivot])
        greater = qsort([x for x in seq[1:] if x >= pivot])
        return lesser + [pivot] + greater


if __name__ == "__main__":
    seq = [5, 6, 78, 9, 0, -1, 2, 3, -65, 12]
    print qsort(seq)

遍歷二叉樹

# -*- coding: utf-8 -*-


class Node(object):
    def __init__(self, data, left=None, right=None):
        self.data = data
        self.left = left
        self.right = right


tree = Node(1, Node(3, Node(7, Node(0)), Node(6)), Node(2, Node(5), Node(4)))


def lookup(root):
    """
    層次遍歷
    """
    stack = [root]
    while stack:
        current = stack.pop(0)
        print current.data
        if current.left:
            stack.append(current.left)
        if current.right:
            stack.append(current.right)


def deep(root):
    """
    深度遍歷
    """
    if not root:
        return
    print root.data
    deep(root.left)
    deep(root.right)


def maxDepth(root):
    """
    求最大樹深
    """
    if not root:
        return 0
    return max(maxDepth(root.left), maxDepth(root.right)) + 1


def isSameTree(tree_one, tree_two):
    if not tree_one and not tree_two:
        return True
    elif tree_one and tree_two:
        return tree_one.data == tree_two.data and isSameTree(tree_one.left, tree_two.right) and isSameTree(tree_one.right, tree_two.right)
    else:
        return False


if __name__ == "__main__":
    # lookup(tree)
    # deep(tree)
    maxDepth(tree)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市苛白,隨后出現(xiàn)的幾起案子境析,更是在濱河造成了極大的恐慌全谤,老刑警劉巖赁炎,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妇穴,死亡現(xiàn)場(chǎng)離奇詭異犬性,居然都是意外死亡诡挂,警方通過(guò)查閱死者的電腦和手機(jī)碎浇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)璃俗,“玉大人奴璃,你說(shuō)我怎么就攤上這事〕腔恚” “怎么了苟穆?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)唱星。 經(jīng)常有香客問(wèn)我雳旅,道長(zhǎng),這世上最難降的妖魔是什么间聊? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任攒盈,我火速辦了婚禮,結(jié)果婚禮上哎榴,老公的妹妹穿的比我還像新娘型豁。我一直安慰自己,他們只是感情好叹话,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布偷遗。 她就那樣靜靜地躺著,像睡著了一般驼壶。 火紅的嫁衣襯著肌膚如雪氏豌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天热凹,我揣著相機(jī)與錄音泵喘,去河邊找鬼泪电。 笑死,一個(gè)胖子當(dāng)著我的面吹牛纪铺,可吹牛的內(nèi)容都是我干的相速。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鲜锚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼突诬!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起芜繁,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤旺隙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后骏令,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔬捷,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年榔袋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了周拐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凰兑,死狀恐怖妥粟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情聪黎,我是刑警寧澤罕容,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站稿饰,受9級(jí)特大地震影響锦秒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜喉镰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一旅择、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侣姆,春花似錦生真、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蚜厉,卻和暖如春长已,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工术瓮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留康聂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓胞四,卻偏偏與公主長(zhǎng)得像恬汁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辜伟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 人際關(guān)系由強(qiáng)關(guān)系和弱關(guān)系組成氓侧,強(qiáng)關(guān)系是用來(lái)鏈接情感,弱關(guān)系是用來(lái)鏈接信息的导狡。 其實(shí)弱連接理論在本質(zhì)上更重要甘苍。 弱連...
    DZ2015閱讀 164評(píng)論 0 0
  • 最近奧巴馬講給美國(guó)小學(xué)生的一個(gè)演講很火。其實(shí)他三年前就做了這個(gè)演講烘豌。背景是激勵(lì)小孩子們認(rèn)真學(xué)習(xí),長(zhǎng)大才有出息看彼。 可...
    將軍府上閱讀 534評(píng)論 0 2
  • 沉住氣穩(wěn)健積累的人贏得了每一次轉(zhuǎn)身廊佩,最后轉(zhuǎn)身一躍到蔚藍(lán)大海,那些急功近利渴望翻身的咸魚們靖榕,最終死在了沙灘上标锄。 寫作...
    今朝有酒今朝閱讀 201評(píng)論 0 0
  • 今天我乘坐叔叔的車去我哥哥家玩,我真是非常開心茁计,因?yàn)槲蚁矚g我的哥哥料皇。我最喜歡的是她家的那個(gè)手指陀螺,知道為什么我喜...
    小王子WXN閱讀 285評(píng)論 0 1