原创 SQL的內連接與外連接

    有兩個表A和表B。   表A結構如下:   Aid:int;標識種子,主鍵,自增ID   Aname:varchar   數據情況,即用select * from A出來的記錄情況如下圖1所示:   表B結構如下:

原创 hihoCoder#1014 Trie樹

題目鏈接 最近發現hihoCoder上的題目都會用到比較單純的數學結構和算法,不限LeetCode上那樣,有些腦筋急轉彎的感覺~ hihoCoder上的題目就像比賽那樣,一般會給你一個場景,不同的是,他會在“小hi”和”小ho

原创 python generator 的惰性計算

今天和朋友看到這麼一段代碼 data = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2, 3, 8, 4] group_sz =

原创 C++ 智能指針詳解

一、簡介 由於 C++ 語言沒有自動內存回收機制,程序員每次 new 出來的內存都要手動 delete。程序員忘記 delete,流程太複雜,最終導致沒有 delete,異常導致程序過早退出,沒有執行 delete 的情況並不罕見。 用智

原创 #1098 : 最小生成樹二·Kruscal算法

隨着小Hi擁有城市數目的增加,在之間所使用的Prim算法已經無法繼續使用了——但是幸運的是,經過計算機的分析,小Hi已經篩選出了一些比較適合建造道路的路線,這個數量並沒有特別的大。 所以問題變成了——小Hi現在手上擁有N座城市,且已知其中

原创 python @property

在綁定屬性時,如果我們直接把屬性暴露出去,雖然寫起來很簡單,但是,沒辦法檢查參數,導致可以把成績隨便改: s = Student() s.score = 9999 這顯然不合邏輯。爲了限制score的範圍,可以通過一個set_sco

原创 [LeetCode]Power of Two

Given an integer, write a function to determine if it is a power of two. 這道題看似很簡單,也確實簡單,只要一直除2,然後判斷是否是2的冪次方。 但是這樣速度勢必不

原创 hihocoder#1066 : 無間道之並查集

經典的並查集算法 輸入 每個測試點(輸入文件)有且僅有一組測試數據。 每組測試數據的第1行爲一個整數N,表示黑叔叔總共進行的操作次數。 每組測試數據的第2~N+1行,每行分別描述黑叔叔的一次操作,其中第i+1行爲一個整數op_i和兩個由

原创 hihoCoder#1093 最短路徑·三-SPFA算法

Shortest Path Faster Algorithm 其實就是用於稀疏邊的最小路徑算法。該算法的算法複雜度爲O(kM)k可以證明爲小於等於二的常數 萬聖節的晚上,小Hi和小Ho在吃過晚飯之後,來到了一個巨大的鬼屋! 鬼屋中一共有

原创 hihoCoder#1032 最長迴文子串——Manacher算法

這道題在之前的Leet上也做過,後來看到過一些比較形象的圖,這裏就摘過來了,原地址 首先,在字符串s中,用cnt[i]表示第i個字符的迴文半徑,即cnt[i]儘可能大,且滿足: s[i-cnt[i],i-1]=s[i+1,i+cnt[i

原创 hihoCoder#1089 最短路徑·二

萬聖節的中午,小Hi和小Ho在吃過中飯之後,來到了一個新的鬼屋! 鬼屋中一共有N個地點,分別編號爲1..N,這N個地點之間互相有一些道路連通,兩個地點之間可能有多條道路連通,但是並不存在一條兩端都是同一個地點的道路。 由於沒有肚子的壓

原创 hihoCoder#1081 最短路徑·一

描述 萬聖節的早上,小Hi和小Ho在經歷了一個小時的爭論後,終於決定了如何度過這樣有意義的一天——他們決定去闖鬼屋! 在鬼屋門口排上了若干小時的隊伍之後,剛剛進入鬼屋的小Hi和小Ho都頗飢餓,於是他們決定利用進門前領到的地圖,找到一條通往

原创 permutation 問題小結——康託展開

昨天做百度的校招筆試題,又碰到了類似於permutation的題目,求其在其序列中是第幾小的,這類題目和leetcode上的題目類似 Permutations:輸出所有的序列組合,這裏其實可以用庫函數中的next_permutation(

原创 STL幾種常見類型的比較

這裏主要是想要比較幾種容器的性能,至於他們的接口不在考慮範圍 Vector 相當於一個數組。在內存中分配一塊連續的內存空間進行存儲。支持不指定vector大小的存儲。STL內部實現時,首先分配一個非常大的內存空間預備進行存儲,即capac

原创 洗牌算法 及其證明

今天看到了網易往年的一題面試題,是要寫洗牌算法及其證明的。要保證每張牌的概率都是1/N。 假設有N張牌。用數組poker[]表示。 srand(time(NULL)); for(int i = 0; i < N; ++i) { i