一些有用的廢話
遠(yuǎn)程寫(xiě)代碼注意點(diǎn)
- 思考清楚再開(kāi)始編碼 腦子永遠(yuǎn)應(yīng)該在手前面 不止是面試藏鹊,任何事都是如此腺办。
- 良好的代碼命名和縮進(jìn)習(xí)慣 我叫sunny怎么了那篇招聘一個(gè)靠譜的 iOS第一題就是風(fēng)格糾錯(cuò)題,大家可以去看看式曲。
- 能夠單元測(cè)試
高質(zhì)量的代碼
- 考慮邊界 錯(cuò)誤處理等
清晰的思路
- 舉幾個(gè)簡(jiǎn)單的例子
- 用圖形表示抽象的數(shù)據(jù)結(jié)構(gòu)
- 把復(fù)雜問(wèn)題分解成若干子問(wèn)題
應(yīng)聘提問(wèn)環(huán)節(jié)推薦問(wèn)與招聘的職位或者項(xiàng)目相關(guān)的問(wèn)題
數(shù)據(jù)結(jié)構(gòu)
數(shù)組
數(shù)組根據(jù)下標(biāo)讀寫(xiě)的特點(diǎn)時(shí)間效率非常高场钉,可以用數(shù)組實(shí)現(xiàn)簡(jiǎn)單的哈希表来吩。
面試題 二維數(shù)組的查找
首先我們可以在紙上畫(huà)出一個(gè)二維數(shù)組,假設(shè)查找7戚长。當(dāng)我們從右上角開(kāi)始查找時(shí),無(wú)非就三種情況怠苔,
該元素等于7同廉,那么查找成功,打印出所在行列
該元素小于7迫肖,該行所有元素都小于7 該行不用找了
該元素大于7,該列所有元素都大于7 該列不用找了蟆湖。
思路理清以后 可以寫(xiě)代碼了
關(guān)鍵代碼如下
void Find(int cols,int rows){
if (cols>0&&rows>0) {
int row=0;
int col=cols-1;
while (row <rows && col>=0) {
//右上角元素
if (a[row][col]==x) {
printf("%d行%d列",row+1,col+1);
//return;
}else if (a[row][col]>x){
col--;
}else{
row++;
}
}
}
return;
}
從左下角也可以鸠天,代碼如下
void LeftFind(int cols,int rows){
if (cols>0&&rows>0){
int row=rows-1;
int col=0;
while (col<cols&&row>=0) {
if (a[row][col]==x) {
printf("%d行%d列",row+1,col+1);
}else if (a[row][col]<x){
col++;
}else{
row--;
}
}
}
return;
}
本題的思考 當(dāng)遇到一個(gè)復(fù)雜問(wèn)題時(shí),不要急著編碼帐姻,可以通過(guò)畫(huà)圖用具體的例子尋找規(guī)律。
字符串
一種減少移動(dòng)次數(shù)的方法 先遍歷字符串統(tǒng)計(jì)出空格的總數(shù)饥瓷,算好擴(kuò)展后的字符串長(zhǎng)度痹籍,然后從后向前替換呢铆。
關(guān)鍵代碼如下
void ReplaceBlank(char string[]){
if (string==NULL) {
return;
}
int index1=0;
int index2=0;
int blankCount=0;
//遍歷字符串,讓index1指向最后一個(gè)字符 并統(tǒng)計(jì)空格數(shù)
while (string[index1]!='\0') {
if (string[index1]==' ') {
blankCount++;
}
index1++;
}
int newlength=index1+blankCount*2;
index2=newlength;
while (index1>=0&&index1<index2) {
if (string[index1]==' ') {
string[index2--]='0';
string[index2--]='1';
string[index2--]='%';
}else{
string[index2--]=string[index1];
}
index1--;
}
}
相關(guān)題目 兩個(gè)排序好的數(shù)組a b a有足夠空間容納b 寫(xiě)一個(gè)函數(shù)把b中所有數(shù)字插到a中
本題的思考 合并數(shù)組和字符串棺克,我們可以考慮通過(guò)從后向前復(fù)制減少移動(dòng)次數(shù)
代碼
void insert(){
int i=5;
int j=10;
for (int k=4; k>=0; k--) {
//當(dāng)b元素小于a時(shí) 移動(dòng)a中元素
while (b[k]<a[i]&&i>=0) {
a[j]=a[i];
j--;
i--;
}
//b中元素大于等于a中的元素 插入a
//如果a全部移到后面 那么不用比較 把b全部插入
if (i==0) {
while (k>=0) {
a[j]=b[k];
j--;
k--;
return;
}
}
a[j]=b[k];
j--;
}
}