Time of Update: 2018-12-04
前一段時間學了簡單的並查集,網上逛技術部落格,看到並查集的拓展,在原有並查集的基礎上,加入集合內部元素和其父節點之間的關係,這樣的拓展,可以解決更多問題題目連結:http://poj.org/problem?id=2492題目大意:輸入n個bug,bug之間有interaction,當前假設異性之間才interaction,但是需要驗證,給定這些interaction對,判定是否滿足假設如果男<->女和女<->男,滿足條件,如果存在男<->男或者女<-&
Time of Update: 2018-12-04
題目:在一維座標軸上有n個區間段,求重合區間最長的兩個區間段。分析:這題和《編程之美》時間安排的題目類似,可以用隊列來表示,首先按照各個區間的左數字進行排序,然後依次入隊列尾,如果遇到區間的右數,從隊列頭找其對應的左數,如果隊列頭是不是其對應的左數,說明這個區間被其他區間完全包圍,相反,如果是其對應的左數,尋找其後面另一個左數,那麼他們之間的差就是該區間能夠形成的最大重合,最後統計最大的,說的有點混亂,直接看代碼吧。網上看到網友的描述,感覺比我描述的好,直接轉載過來了:-------------
Time of Update: 2018-12-04
問題:給定一個二維數組,這個二維數組的每行、每列數字都是遞增的,尋找某個整數是否在二維數組內。分析:這題和堆排序有類似,尋找過程中從右上方的數字開始,如果該數字比尋找的數字小,那麼該數字所在行可以刪除,不用繼續考慮;如果該數字比尋找的數字大,那麼該數字所在列可以刪除。這樣,每次執行,都會刪除一行或者一列,極端情況下,執行2n次。演算法代碼:#include <iostream>#include <cstdlib>#include <cstdio>using
Time of Update: 2018-12-04
問題:兩個有序數組,合并成一個有序數組,假設第一個數組空間足夠容納兩個數組。分析:考慮到a數組很大,可以直接在a數組上進行合并,但是要講究效率。如果單純從前往後合并,那麼效率會非常低,因為a數組後面的數字需要不停的移動。換一種思路,我們採用從後往前合并,首先計算出總長度,設定一個指標從a數組最後往前移動。演算法代碼:#include <iostream>#include <cstdio>#include <cstdlib>using namespace
Time of Update: 2018-12-04
POJ:http://poj.org/problem?id=2528這兩天在學習線段樹演算法,參考了網上許多線段樹的資料,用Google搜一下,就能搜到很多,這裡就不詳細解釋什麼事線段樹了。線段樹在解決區間重合問題,比如求一段區間,最大值,最小值,求和等問題非常有效,一次查詢的時間複雜度是log(n),時間複雜度非常理想。題目大意:在牆壁上貼廣告,廣告的版面有大有小,並且貼廣告有先後之分,後面貼的廣告會覆蓋前面的廣告,求解最後能看到的廣告面,如所示:兩種視圖,最後從From
Time of Update: 2018-12-04
題目:如標題所示,不用平方根庫函數,求解一個數位平方根。分析:這個問題有兩個思路:思路1:採用二分的方式(無處不在的二分),上界初始化為數字本身,下界初始化為1,這樣用二分,判斷中間數位平方和目標數字比較,再修改上界和下界,直到小於一定的閾值。思路2:採用牛頓法(數值分析中提到),採用微分的方式,從初始點開始,每次迭代,微分求解切線,然後求解切線和x軸的交點,再以這個交點作為起點,迭代進行。比如求解24,那麼寫出函數:f(x) = x^2 -
Time of Update: 2018-12-04
題目:編寫Trie樹基本操作,包括插入,搜尋,銷毀分析:字典樹,就是一棵26叉樹(不考慮樹的字元的大小寫問題),在每個節點中加入計數器,表示從根節點到達當前節點的字元流表示一個字串,代碼如下:#include <iostream>#include <cstdio>using namespace std;#define ELEMENT_MAX 26typedef struct trie_node{int count;struct trie_node *
Time of Update: 2018-12-04
題目:連續的正數序列,使得和為指定值分析:以前做過類似的題目,求解兩個數字和為指定值這種題目,採用先排序,然後從兩頭開始尋找的方式,這題其實也差不多,採用兩個指標,不過這次兩個指標同時從頭開始尋找,初始化時first指標指向1,second指標指向2,如果curr_sum小於指定的sum,second指標往後移東;相反,如果curr_sum大於指定的sum,first指標往後移動。代碼如下:#include <iostream>#include
Time of Update: 2018-12-04
#include<stdio.h>void heapAdjust(int *a,int s,int m);int main(){FILE *f_in,*f_out;int i,j,n;int
Time of Update: 2018-12-04
問題:非常經典的問題,將一個二叉樹遍曆,前序,中序,後序遍曆由遞迴轉換成非遞迴。分析:遞迴轉換成非遞迴,一般解法是自己使用棧去類比遞迴過程,首先我們來看下後序遍曆遞迴解法:void postOrderTraverse(pNode root){if(root == NULL)return ;postOrderTraverse(p->left);postOrderTraverse(p->right);visit(p);return
Time of Update: 2018-12-04
問題:經典的八皇后問題分析:遞迴解法直觀易懂,但是迭代法需要想點思路代碼如下:/* * eightQueen.cpp * * Created on: 2012-10-14 * Author: happier */#include <iostream>using namespace std;#define N 8int sum = 0;int *x = new int[N + 1];bool place(int k){int i;for (i = 1; i < k;
Time of Update: 2018-12-04
題意:在M*N的矩陣中,每個元素為0或1,現在問你能否找到若干行,使得每一列只有1個1.思路:bfs + 優先隊列原始碼:#include <iostream>#include <cstring>#include <cstdio>#include <queue>using namespace std;const int MAXN = 17;const int MAXM = 301;int matrix[MAXN][MAXM];int
Time of Update: 2018-12-04
最近需要將伺服器端軟體由windows移植到Linux,以前討論過windows下的Socket和Linux下的socket區別,雖然socket問題解決了,但是最近一系列的字元類型問題以及大端小端問題,折磨得我非常痛苦,下面述說這兩天遇到的問題。1,操作野檔案描述符在open("mini2440_spi", O_RDWR)操作時,沒有將開啟的檔案描述符賦值給int
Time of Update: 2018-12-04
題目:兩個數組a[N],b[N],其中A[N]的各個元素值已知,現給b[i]賦值,b[i] = a[0]*a[1]*a[2]...*a[N-1]/a[i];要求:1.不準用除法運算2.除了迴圈計數值,a[N],b[N]外,不準再用其他任何變數(包括局部變數,全域變數等)3.滿足時間複雜度O(n),空間複雜度O(1)分析:好久沒做題了,這次做一個比較簡單的題,由於題目要求不能使用其他額外的局部變數和全域變數(當然除了計數器比變數),可以考慮使用b[0]儲存,迴圈兩次,其中:b[i] = a[0]
Time of Update: 2018-12-04
問題:環形列印矩陣,比如:1 2 3 412 13 14 511 16 15 610 9 8 7從外到內迴圈列印。分析:問題可以分解為4個問題,首先矩形向右走,到頭後,再向下走,再向左走,最後向上走,如此迴圈,關鍵在於判斷邊界條件。代碼:#include <stdio.h>#define MAX 20int n,square[MAX][MAX];int ok(int x,int y){ return (0<=x&&x<n&
Time of Update: 2018-12-04
問題:全排列問題,但是存在重複元素,比如babc,求全排列,要求全排列不能包含重複串分析:由於存在重複元素,經典的全排列-遞迴方式不能達到題目要求,可以在原有全排列的基礎上加入判斷,還要對所有元素首先進行一次排序,具體代碼如下:#include <iostream>#include <algorithm>using namespace std;void SubPermutation(char a[], int
Time of Update: 2018-12-04
放假玩了這麼多天,今天回到了計算所,上午和朱老師短聊了會,討論下工位和電腦問題,由於這學期做畢業設計是和羅老師,所以我工位現在有所變化,調到了6樓,並且今天速度也比較迅速,馬上就配備了新的台式機,只是台式機不給我面子,沒用多久,網卡就不識別了,尷尬了,明天還得好好弄弄。
Time of Update: 2018-12-04
哎,雖然因為對於 NOIP 資訊奧賽的厭惡讓我對於資料結構的全面學習延遲到了現在,但是我依然想要呐喊一句:我討厭資訊奧林匹克這個無聊的比賽!不過這幾天系統地開始學習資料結構,其實每一個資料結構都有無窮的威力,就連我以前嗤之以鼻的圖論演算法,這兩天看來,也是很值得一學的了。也罷,就做做資料結構的筆記吧。首先要說的是優先隊列。為什麼不從表、棧、隊列這種最簡單的結構開始呢?我覺得沒必要,自己看沒必要,別人更沒必要。優先隊列,即在普通隊列的 ADT
Time of Update: 2018-12-04
#call.py個class被載入的情況下。class Next: List = [] def __init__(self,low,high) : for Num in range(low,high) : self.List.append(Num ** 2) def __call__(self,Nu): return self.List[Nu] 如果 這樣玩 b = Next(1,7)print
Time of Update: 2018-12-04
摘自:http://li2z.cn/2010/04/14/python_subprocess/此文和python內建函數一樣,內容全部出自python官方文檔,但是會有自己的理解,並非單純的翻譯。所以,如果我理解有誤,歡迎指正,謝謝。從python2.4版本開始,你就可以用可以用subprocess這個模組來產生子進程,並串連到子進程的標準輸入/輸出/錯誤中去,還可以得到子進程的傳回值。subprocess意在替代其他幾個老的模組或者函數,比如:os.systemos.spawn*os.pope