1.自定義實現字串轉為整數的演算法,例如把「123456」轉成整數123456.(輸入中可能存在符號,和數字)
//返回結果的有效標誌
enum status ;
int gstatus = valid;
int strtoint(const char* str)
while(*digit != '\0')
digit++;
} //非法輸入
else
} if(*digit == '\0')
} return static_cast(result);
}
2.給出一棵二叉樹的前序和中序遍歷,輸出後續遍歷的結果,假設二叉樹中儲存的均是ascii碼。如前序:abdhecfg,中序:hdbeafcg,則輸出後序為:hdecfgca。
思路:先利用前序和中序構建出二叉樹,然後後序遍歷輸出結果
/**
*返回二叉樹的根節點
*preorder:前序遍歷序列
*inorder:中序遍歷序列
*len:節點數目
*/
node* getbinarytree(char* preorder, char* inorder, int len)
//通過遞迴找到左子樹和右子樹,注意子樹的前序中序的下標的計算
if(pos == 0)
root->lchild = null;
else
root->lchild = getbinarytree(preorder+1, inorder, pos);
if(len-pos-1 == 0)
root->rchild = null;
else
root->rchild = getbinarytree(preorder+pos+1, inorder+pos+1,len-pos-1);
return root;
}
/**
*後續遍歷二叉樹
* */
void postorder(node* root)
/**
*根據前序遍歷和中序遍歷輸出後續遍歷
* */
void printpostorderviapreorderandinorder(char* preorder, char* inorder)
3.給出了乙個n*n的矩形,程式設計求從左上角到右下角的路徑數(n > =2),限制只能向右或向下移動,不能回退。例如當n=2時,有6條路徑。
一是利用數學知識,從左上角到右下角總共要走2n步,其中橫向要走n步,所以總共就是c2n~n。
二是利用遞迴實現
/**
*返回總路徑數
*引數m:表示矩形的橫向格仔數
*引數n:表示矩形的縱向格仔數
*/
int gettotalpath(int m, int n)
人人網2014筆試演算法題彙總
1.給出乙個有序陣列啊,長度為len,另外給出第三個數x,問是否能在陣列中找到兩個數,這兩個數之和等於第三個數x。我們首先看到第一句話,這個陣列是有序的,所以,我們可以定義兩個指標,乙個指向陣列的第乙個元素,另乙個指向應該指向的位置 這個需要看具體的實現和陣列給定的值 首先計算兩個位置的和是否等於給...
美團網2014筆試演算法題彙總
1.鍊錶翻轉。給出乙個鍊錶和乙個數k,比如鍊錶1 2 3 4 5 6,k 2,則翻轉後2 1 4 3 6 5,若k 3,翻轉後3 2 1 6 5 4,若k 4,翻轉後4 3 2 1 5 6,用程式實現。include using namespace std struct listnode listn...
阿里巴巴2014筆試演算法題彙總
1.兩棵二叉樹t1和t2,t1的節點數是百萬量級,t2的節點數一千以內,請給出判斷t2是否t1子樹的可行演算法。分析 首先想到的是遞迴,但是t1的數量級太大,遞迴會導致棧溢位,於是以非遞迴實現。bool issubtree binarytreenode proot1,binarytreenode p...