1、c字串是以『\0』字元作為結束標誌的
char *p="abcde\0fghjik\0";
printf("%d\n" , strlen(p)); //5 (a、b、c、d、e)
char acnew[20]= "\\0\0";
printf("%d\n",strlen(acnew)); //2 (\和0)
2、建構函式和虛析構函式
#include "stdafx.h"
#include #include class a
; //字元指標陣列
char **b=a; //ok
int a[3][4];
int (*p)[4]=a; //ok,指向含有4個整型元素的一維陣列的指標
int **p = a; //error
4、不要返回臨時變數的引用
float &test(float a,float b)
float c=a*b;
returnc; //返回臨時變數的引用,當函式結束後,該臨時物件記憶體被釋放掉,返回的引用變成空引用
5、const引用的特殊用處(const變數在編譯期間就已經確定初始值了)
int a = 10;
double &test = a + 0.2; //error,不同型別的引用
const double &test = a + 2.0; //ok,const引用可用於不同型別之間
const int &ra=a;
ra=1; //error
a=1; //ok
void bar(string &s);
bar(「hello」); //error,試圖將乙個const 物件轉換為非const
6、桶排序介紹
輸入是由乙個隨機過程產生的[0, 1)區間上均勻分布的實數。
將區間[0, 1)劃分為n個大小相等的子區間(桶),每個桶大小1/n:[0, 1/n), [1/n, 2/n), [2/n, 3/n),…,[k/n, (k+1)/n ),…,
將n個輸入元素分配到這些桶中,對桶中元素進行排序,
按照順序將各個桶中的元素列出來。
7、在乙個檔案中有 10g 個整數,亂序排列,要求找出中位數。記憶體限制為 2g。只寫出思路
解法:首先假設是32位無符號整數。
1. 讀一遍10g個整數,把整數對映到256m個區段中,用乙個64位無符號整數給每個相應區段記數。說明:整數範圍是0 - 2^32- 1,一共有4g種取值,對映到256m個區段(256m個桶),則每個區段有16(4g/256m = 16)種值,每16個值算一段, 0~15是第1段,16~31是第2段,……2^32-16 ~2^32-1是第256m段。乙個64位無符號整數(計數)最大值是0~8g-1,這裡先不考慮溢位的情況。總共占用記憶體256m×8b=2gb。
2. 從前到後對每一段的計數累加,當累加的和超過5g時停止,找出這個區段(即累加停止時達到的區段,也是中位數所在的區段)的數值範圍,設為[a,a+15],同時記錄累加到前乙個區段的總數,設為m。然後,釋放除這個區段占用的記憶體。
3. 再讀一遍10g個整數,把在[a,a+15]內的每個值計數,即有16個計數。
4. 對新的計數依次累加,每次的和設為n,當m+n的值超過5g時停止,此時的這個計數所對應的數就是中位數。
筆試面試題
1 昨天參加一公司筆試,給幾道演算法題整懵了,其實也不難,但好久沒有碰演算法,只是有思路,要讓我在這麼短的時間內寫出程式來還是不行。2 這裡將其中一道稍微複雜一點的演算法題寫下來,以此小結。3 4 題目描述 5 將n個雞蛋放入到m個籃子中去 n m 保證每個籃子中至少乙個雞蛋,然後指定乙個數x,要求...
面試題 筆試
題1 有如下資料庫表tab 請用乙個 delete 語句,刪除 value 重複的行,每個 value 只保留 id 最小的一行。delete from tab where id notin select from select min id from tab groupby value a 好像有...
筆試面試題
1.書架上有編號為1 19的19本書,從中拿5本,問5本編號都不相鄰的拿法有多少種?使用隔板法,拿掉5本後剩下14塊板,即有15個空,使用組合15份插5份 c15 5 3003 2.1億個資料取前1萬大的整數 演算法思路 a.把1億個資料分成10000個陣列,b.求出10000個陣列的最大值,儲存到...