Time of Update: 2018-12-04
Built-in Variablesawk的內建變數:ARGC 同CARGIND being processed 的index(英文的描述更精確一點)ARGV 同C.BINMODE On non-POSIX systems, specifies use of binary mode for all file I/O. Numeric values of 1, 2, or 3,specify that input files, output
Time of Update: 2018-12-04
POJ2513題目連結 以為是很簡單的字典樹……哭……歐拉迴路以前貌似用過,還有一點印象,並查集是真的沒有用過,各種搜尋,附一些連結,並寫寫自己的總結~ 歐拉迴路:1 定義 歐拉通路 (歐拉跡) ——通過圖中每條邊一次且僅一次,並且過每一頂點的通路。 歐拉迴路 (歐拉閉跡) ——通過圖中每條邊一次且僅一次,並且過每一頂點的迴路。 歐拉圖 ——存在歐拉迴路的圖。2 無向圖是否具有歐拉通路或迴路的判定 G有歐拉通路的充分必要條件為:G
Time of Update: 2018-12-04
題目連結 題目的那點在於如何求解角度,這裡採用的方法是二分求解:一般地,對於函數f(x),如果存在實數c,當x=c時f(c)=0,那麼把x=c叫做函數f(x)的零點。 解方程即要求f(x)的所有零點。 先找到a、b,使f(a),f(b)異號,說明在區間(a,b)內一定有零點,然後求f[(a+b)/2], 現在假設f(a)<0,f(b)>0,a<b ①如果f[(a+b)/2]=0,該點就是零點,
Time of Update: 2018-12-04
從簡單到複雜的分析,從1位元開始,找到規律,抽象出公式。體現的是分解問題的能力,找到問題切入點的能力。個人覺得書中的公式有一點問題,對於命題2的公式應該為f( 10^n - 1) = n * (10^ (n-1) ) 代碼://編程之美--求1的個數//如果要求f(N) = N的最大解N,先證明//f( 10^n - 1) = n * (10^ (n-1) )#include <iostream>using namespace std;int NewPro(int
Time of Update: 2018-12-04
題目連結:摸我 看完題目會有一些比較直觀的想法,顯然是用DP,迭代公式也比較好想,f(i,j) = max{ f(i-1,j), f(i+1,j), f(i,j-1), f(i,j-1) } + 1在上述公式中要注意的是若且唯若周圍的點比當前點小的時候才能列入計算的運算式中。為了讓搜尋更為迅速,我給資料增加了邊界,並且由於採用了迭代的方式,對DP數組中的數值設定了Unprocessed和Processing兩個值,只有未處理的節點才會進行迭代計算。廢話不多說,代碼如下: //POJ1088滑雪(
Time of Update: 2018-12-04
為了使程式更清晰、簡短,容器類型最常用的建構函式是預設建構函式。在大多數的程式中,使用預設建構函式能達到最佳運行時效能,並且使容器更容易使用。將一個容器複製給另一個容器時,類型必須匹配:容器類型和元素類型都必須相同。C++
Time of Update: 2018-12-04
筆試的時候碰見一個問題,當時沒有解決,回來想了一下,其實也很簡單…… 題目要求:已知一顆樹(二叉排序樹),現在要求求解路徑和為固定值的所有路徑。 例如樹: 10 5 12 4 7 所求的和為22,則輸出的路徑為10 5 7 以及10 12。 這個可以使用棧來暫存資料,有了這個思路之後用遞迴就可以解決,代碼如下: //Tencent No.4#include
Time of Update: 2018-12-04
原文連結:http://blog.csdn.net/PacificDLUT/article/details/3936990一直都聽說有兩種方式提交表單,即POST與GET,它們到底有怎樣的區別呢?用GOOGLE搜了一下,找到一些覺得寫的比較經典的與大家分享。 1、Get是用來從伺服器上獲得資料,而Post是用來向伺服器上傳遞資料。2、Get將表單中資料的按照variable=value的形式,添加到action所指向的URL後面,並且兩者使用“?”串連,而各個變數之間使用“&”串連;Po
Time of Update: 2018-12-04
面試的時候也碰見了這個問題,我當時採取的解決方案是把數組double,然後從length-k開始遍曆length個字元。時間開銷是O(2N) = O(N)空間開銷是O(2N) = O(N);這個代碼就不貼了,實現起來比較簡單。 為了減少時間和空間的開銷,我們還能有更好的解法嗎?時間複雜度已經是線性了,這個開銷已經不能再降低了,空間呢? 然後我考慮用大小為k的數組儲存需要移位的資料,然後執行移位操作。考慮到當k>N的時候,只需要移位k%N即可。因此空間複雜度可以下降到O(N/2) =
Time of Update: 2018-12-04
Arrays數組Arrays are subscripted with an expression between square brackets ([ and ]). If the expression is an expression list (expr, expr ...) then the array subscript is a string consisting of the concatenation of the (string) value of each
Time of Update: 2018-12-04
最早見到這道題目是在poj中,具體的題目忘記了,但是所要求的演算法是一致的。 當時在學習LCS,因此想了一種和LCS比較相似的解法: 對原數組使用快速排序,然後使用LCS的思想求最大公用字串。 這種解法比較容易理解,但是所需要的空間為:O(2N) = O(N);時間為O(N^2+N*lgN) = O(N^2),顯然這不是一種最優的解法。但是當時還真沒有想到更好的解法…… 最近看到編程之美上面的題目,然後豁然開朗。 書中提供了兩個解法: 1.
Time of Update: 2018-12-04
原文連結 互斥鎖儘管在PosixThread中同樣可以使用IPC的訊號量機制來實現互斥鎖mutex功能,但顯然semphore的功能過於強大了,在PosixThread中定義了另外一套專門用於線程同步的mutex函數。 關於IPC的相關知識可以登入連結查看。IPC訊號量的知識在文章IPC under Linux-Semaphore中有詳細的說明連結。 1.
Time of Update: 2018-12-04
重點是理解:當有一半都是同一個ID時,同時刪除兩個ID得到的結果最大ID已然佔一半以上。 剩下的在代碼中有些注釋,貼之: //This file is used to test the size of//different char type#include <iostream>using namespace std;int FindMost(int *iVec,int n){int nTimes = 0;int result;for (int i = 0; i<n;++i){
Time of Update: 2018-12-04
Control Statements控制語句The control statements are as follows: if (condition) statement [ else statement ] while (condition) statement do statement while (condition) for (expr1; expr2; expr3)
Time of Update: 2018-12-04
複習了快速排序。 另外還有一個比較大的收穫是:對於返回兩個下標的題目,使用先排序,再用兩個遊標分別從數組的兩端進行遍曆的方法可以達到O(N)的時間複雜度。 本題的主要思路就沿著這個想法展開,代碼如下: //編程之美,快速尋找滿足條件的兩個數字#include <iostream>using namespace std;bool FindTwoNumber(int *iArray, int length, int aimNum, int &x, int
Time of Update: 2018-12-04
樹中最遠的節點個數一定是兩個葉子節點或者葉子節點到根節點的距離(該樹只有一個葉子節點的情況!)。 解法5:用O(4*n)的方法對原數組建最大堆,然後pop出k次即可。時間複雜度為O(4*n+k*logn) 解法7:利用hash儲存數組中元素Si出現的次數,利用計數排序的思想,線性從大到小掃描過程中,前面有k-1個數則為第k大數,平均情況下時間複雜度O(n) 附註:
Time of Update: 2018-12-04
編程之美和編程珠璣上面都有這個經典的例子,珠璣甚至用了第八章整整一章來闡述這個例子,這裡對演算法的細節就不加以闡述了,(我可以肯定沒有這兩本書中解釋的清楚……),但是我對編程之美的擴充問題進行了求解(珠璣的題目比較深奧,還沒有深入解答)。 在這裡先說擴充問題的第二題:這裡以最後一種演算法為基礎進行擴充,每次當A[i] > nStart +
Time of Update: 2018-12-04
題目:在一個檔案中有 10G 個整數,亂序排列,要求找出中位元。記憶體限制為 2G。唯寫出思路即可(記憶體限制為 2G的意思就是,可以使用2G的空間來運行程式,而不考慮這台機器上的其他軟體的佔用記憶體)。 關於中位元:資料排序後,位置在最中間的數值。即將資料分成兩部分,一部分大於該數值,一部分小於該數值。中位元的位置:當樣本數為奇數時,中位元=(N+1)/2 ;
Time of Update: 2018-12-04
宏中"#"和"##"的用法一、一般用法我們使用#把宏參數變為一個字串,用##把兩個宏參數貼合在一起.用法:#include#includeusing namespace std;#define STR(s) #s#define CONS(a,b) int(a##e##b)int main(){ printf(STR(vck)); // 輸出字串"vck" printf("%d/n", CONS(2,3)); // 2e3 輸出:2000 return
Time of Update: 2018-12-04
這裡提供了一種高效的解決方案,值得借鑒。 需要注意的是程式GCD函數的第二行,當其中一個值為0的時候返回另外一個值,否則導致棧溢出(因為沒有非遞迴的結束條件!) 代碼如下: //編程之美2.7 最大公約數#include <iostream>using namespace std;template<class T>T Gcd(T x, T y){if(x<y)return Gcd(y,x);if(!y)return