原创 深入理解extern "C" 的使用

前言 最近用到了動態庫的函數dlsym函數,其作用是返回指定符號函數的地址。詳見 深入理解Linux動態庫和靜態庫http://blog.csdn.net/u013616945/article/details/75151418

原创 二進制中1的個數及其拓展

前言 判斷二進制中1的個數可以變形出很多道算法題,本文主要是總結位運算還有相關位運算的算法題。 左移和右移 對於m<<n,左移運算符對於正負數都是將最左邊的n位丟棄,同時在最右邊補上n個0。 如:00010101<<2 = 0

原创 由重建二叉樹算法題到臨時對象不能綁定到非 const 的左值引用

前言 最近在刷劍指offer,在將一個臨時變量傳給一個引用的時候,出現了non-const lvalue reference to type 'vector<[...]>' cannot bind to a temporary o

原创 數字追趕--搜狐筆試題

題目如下: //下面的for循環分別循環了幾次。 1. unsigned short i,j; for(i=0, j=2; i!=j; i+=5, j+=7) {} 2. unsigned short i,j; for(i=3,

原创 滑動窗口變形題-最大值減去最小值小於等於num的子數組

題目: 基本思想: 解法1: 最先想到的方法是遍歷所有的子數組,然後對每一個子數組分別求出最大值和最小值,然後判斷兩者之差是否小於num即可。 代碼如下: int getNumEnum(vector<int> arr,int

原创 面試題總結之快速排序

前言 你說你熟悉常用的數據結構和算法,談談快速排序算法吧。 解答 首先先給出快速排序的基本思想: (1)先從數列中選擇一個數作爲基準數 (2)將序列分成兩個區間,小於步驟(1)基準數的放在左區間,大於基準數的放在右區間。 (

原创 面試題總結之程序編譯過程

前言 請講一下linux如何源文件逐步編譯成可執行文件。 解答 首先先上圖對編譯的整個過程有個感性的認識,然後再逐步分析各個過程。 以hello.c 程序爲例 # include <stdio.h> main{ prin

原创 鏈表中環的入口結點

題目: 一個鏈表中包含環,請找出該鏈表的環的入口結點。 解法一: 定義指針P1和P2指向鏈表的頭結點。假設鏈表中的環有n個結點,指針P1先在鏈表走n步,然後兩個指針以相同的速度前進。因爲P1總是比P2多走n個結點,在進入環之後,

原创 深入理解計算機系統之數據的表示與存儲

前言 在編寫程序的時候,不同數據類型進行轉換和計算的時候總是可能出現各種各樣奇怪的bug,所以深入的瞭解計算機系統中數據的表示與存儲有利於我們編寫高效與健壯的計算機程序,本文主要總結計算機系統中整數,浮點數的表示和存儲。 真值與補

原创 深入理解Linux靜態庫與動態庫

前言 最近在寫一個小型的http服務器,爲了能夠提供網頁的動態內容,開始接觸linux靜態庫和動態庫的概念。之後又看了《深入理解計算機系統》的第七章–鏈接,在此對於linux靜態庫和動態庫做一個總結。 爲什麼需要庫 定義 程序一

原创 連續子數組的最大和及其拓展

題目 輸入一個整形數組,數組裏有正數也有負數。數組中一個或連續的多個整數組成一個子數組。求所有子數組的和的最大值。要求時間複雜度爲O(n). 基本思想: 利用動態規劃求解,遞歸公式如下,其中f(i)表示以第i個數字結尾的子數組的

原创 複製鏈表的複製

題目: /* struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) :

原创 單鏈表判環判相交綜合題

題目 給定兩個單鏈表的頭節點head1和head2,單鏈表可能有環,也可能無環。如何判斷兩個鏈表是否相交?相交的話返回相交的第一個節點,不想交的話返回NULL。 要求:如果鏈表1的長度爲N,鏈表2的長度爲M,時間複雜度O(N+M)

原创 深入理解虛函數

前言 在C++中,在基類中被聲明爲virtual並在在一個或多個派生類中被重新定義的成員函數就是虛函數。基本格式如下: virtual (return_type) (func_name) (arg) {function body;

原创 realloc函數用法

函數原型: void *realloc(void *ptr, size_t size); 功能: 重新分配大小爲size的一塊內存,返回內存地址ptr。 函數源碼流程圖: 使用方法: /* realloc example: r