求单链表的最大值与原地逆转_计算机笔试面试题
【字符串】
1、輸入一個(gè)字符串,打印出該字符串中字符的所有排列。
例如輸入字符串a(chǎn)bc,則輸出由字符a、b、c所能排列出來(lái)的所有字符串a(chǎn)bc、acb、bac、bca、cab和cba。
2、有一個(gè)由大小寫組成的字符串,現(xiàn)在需要對(duì)他進(jìn)行修改,將其中的所有小寫字母排在大寫字母的前面
(大寫或小寫字母之間不要求保持原來(lái)次序),如有可能盡量選擇時(shí)間和空間效率高的算法。
c語(yǔ)言函數(shù)原型void proc(char *str),也可以采用你自己熟悉的語(yǔ)言。
3、編寫反轉(zhuǎn)字符串的程序,要求優(yōu)化速度、優(yōu)化空間。
4、用C語(yǔ)言實(shí)現(xiàn)函數(shù)void * memmove(void *dest, const void *src, size_t n)。
memmove函數(shù)的功能是拷貝src所指的內(nèi)存內(nèi)容前n個(gè)字節(jié)到dest所指的地址上。
分析:由于可以把任何類型的指針賦給void類型的指針,這個(gè)函數(shù)主要是實(shí)現(xiàn)各種數(shù)據(jù)類型的拷貝。
5、編程找出兩個(gè)字符串中最大公共子字符串,如"abccade", "dgcadde"的最大子串為"cad"。
6、輸入一個(gè)字符串,輸出該字符串中對(duì)稱的子字符串的最大長(zhǎng)度。
比如輸入字符串"google",由于該字符串里最長(zhǎng)的對(duì)稱子字符串是"goog",因此輸出4。
7、字符串原地壓縮。題目描述:“eeeeeaaaff" 壓縮為 "e5a3f2",請(qǐng)編程實(shí)現(xiàn)。
8、請(qǐng)以回溯與不回溯算法實(shí)現(xiàn)字符串匹配。
9、輸入一個(gè)英文句子,翻轉(zhuǎn)句子中單詞的順序,但單詞內(nèi)字符的順序不變。句子中單詞以空格符隔開。
為簡(jiǎn)單起見,標(biāo)點(diǎn)符號(hào)和普通字母一樣處理。
例如:輸入"I am a student.",則輸出"student. a am I"。
10、在一個(gè)字符串中找到第一個(gè)只出現(xiàn)一次的字符。如輸入abaccdeff,則輸出b。
11、寫一個(gè)函數(shù),它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出連續(xù)最長(zhǎng)的數(shù)字串,并把這個(gè)串的長(zhǎng)度返回,并把這個(gè)最長(zhǎng)數(shù)字串付給其中一個(gè)函數(shù)參數(shù)outputstr所指內(nèi)存。
例如:"abcd12345ed125ss123456789"的首地址傳給intputstr后,函數(shù)將返回9,outputstr所指的值為123456789。
12、定義字符串的左旋轉(zhuǎn)操作:把字符串前面的若干個(gè)字符移動(dòng)到字符串的尾部。
如:把字符串a(chǎn)bcdef左旋轉(zhuǎn)2位得到字符串cdefab。請(qǐng)實(shí)現(xiàn)字符串左旋轉(zhuǎn)的函數(shù)。
要求時(shí)間對(duì)長(zhǎng)度為n的字符串操作的復(fù)雜度為O(n),輔助內(nèi)存為O(1)。
13、有n個(gè)長(zhǎng)為m+1的字符串,如果某個(gè)字符串的最后m個(gè)字符與某個(gè)字符串的前m個(gè)字符匹配,則兩個(gè)字符串可以聯(lián)接。
問這n個(gè)字符串最多可以連成一個(gè)多長(zhǎng)的字符串,如果出現(xiàn)循環(huán),則返回錯(cuò)誤。
14、如果字符串一的所有字符按其在字符串中的順序出現(xiàn)在另外一個(gè)字符串二中,則字符串一稱之為字符串二的子串。
注意,并不要求子串(字符串一)的字符必須連續(xù)出現(xiàn)在字符串二中。
請(qǐng)編寫一個(gè)函數(shù),輸入兩個(gè)字符串,求它們的最長(zhǎng)公共子串,并打印出最長(zhǎng)公共子串。
例如:輸入兩個(gè)字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它們的最長(zhǎng)公共子串,
則輸出它們的長(zhǎng)度4,并打印任意一個(gè)子串。
分析:求最長(zhǎng)公共子串(Longest Common Subsequence, LCS)是一道非常經(jīng)典的動(dòng)態(tài)規(guī)劃題。
15、輸入兩個(gè)字符串,從第一字符串中刪除第二個(gè)字符串中所有的字符。
例如,輸入"They are students."和"aeiou",則刪除之后的第一個(gè)字符串變成"Thy r stdnts."。
16、一個(gè)文件,內(nèi)含一千萬(wàn)行字符串,每個(gè)字符串在1K以內(nèi),要求找出所有相反的串對(duì),如abc和cba。
17、給出一個(gè)函數(shù)來(lái)復(fù)制兩個(gè)字符串A和B。字符串A的后幾個(gè)字節(jié)和字符串B的前幾個(gè)字節(jié)重疊。
18、已知一個(gè)字符串,比如asderwsde,尋找其中的一個(gè)子字符串比如sde的個(gè)數(shù),如果沒有返回0,有的話返回子字符串的個(gè)數(shù)。
19、求最大連續(xù)遞增數(shù)字串(如"ads3sl456789DF3456ld345AA"中的"456789")。
20、實(shí)現(xiàn)strstr功能,即在父串中尋找子串首次出現(xiàn)的位置。
21、編碼完成下面的處理函數(shù)。
函數(shù)將字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改變非'*'字符的先后順序,函數(shù)返回串中字符'*'的數(shù)量。
如原始串為:ab**cd**e*12,處理后為*****abcde12,函數(shù)并返回值為5。(要求使用盡量少的時(shí)間和輔助空間)
22、刪除字符串中的數(shù)字并壓縮字符串。如字符串”abc123de4fg56”處理后變?yōu)椤盿bcdefg”。注意空間和效率。
23、求兩個(gè)串中的第一個(gè)最長(zhǎng)子串(神州數(shù)碼以前試題)。如"abractyeyt","dgdsaeactyey"的最大子串為"actyet"。
【棧、鏈表、樹、圖】
1、編寫一個(gè)程序,把一個(gè)有序整數(shù)數(shù)組放到二叉樹中。
2、編程實(shí)現(xiàn)從頂部開始逐層打印二叉樹節(jié)點(diǎn)數(shù)據(jù)。[參考]
3、編程實(shí)現(xiàn)單鏈表逆轉(zhuǎn)。
4、設(shè)計(jì)一個(gè)算法,找出二叉樹上任意兩個(gè)結(jié)點(diǎn)的最近共同父結(jié)點(diǎn)。復(fù)雜度不能為O(n2)。
5、二叉排序樹中,令f = (最大值+最小值) / 2,設(shè)計(jì)一個(gè)算法,找出距離f值最近、大于f值的結(jié)點(diǎn)。復(fù)雜度不能為O(n2)。
6、有雙向循環(huán)鏈表結(jié)點(diǎn)定義為:
struct node
{
int data;
struct node *front,*next;
};
有兩個(gè)雙向循環(huán)鏈表A,B,知道其頭指針為:pHeadA、pHeadB,請(qǐng)寫一函數(shù)將兩鏈表中data值相同的結(jié)點(diǎn)刪除。
7、輸入一個(gè)鏈表的頭結(jié)點(diǎn),從尾到頭反過(guò)來(lái)輸出每個(gè)結(jié)點(diǎn)的值。鏈表結(jié)點(diǎn)定義如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
8、輸入一棵二元查找樹,將該二元查找樹轉(zhuǎn)換成一個(gè)排序的雙向鏈表。
要求不能創(chuàng)建任何新的結(jié)點(diǎn),只調(diào)整指針的指向。
10
/ \
6 14
/ \ / \
4 8 12 16
轉(zhuǎn)換成雙向鏈表
4=6=8=10=12=14=16。
首先我們定義的二元查找樹 節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)如下:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
}; [參考]
9、設(shè)計(jì)包含min函數(shù)的棧。
定義棧的數(shù)據(jù)結(jié)構(gòu),要求添加一個(gè)min函數(shù),能夠得到棧的最小元素。
要求函數(shù)min、push以及pop的時(shí)間復(fù)雜度都是O(1)。
10、輸入一個(gè)整數(shù)和一棵二元樹。從樹的根結(jié)點(diǎn)開始往下訪問一直到葉結(jié)點(diǎn)所經(jīng)過(guò)的所有結(jié)點(diǎn)形成一條路徑。
打印出和與輸入整數(shù)相等的所有路徑。
例如 輸入整數(shù)22和如下二元樹
10
/ \
5 12
/ \
4 7
則打印出兩條路徑:10, 12和10, 5, 7。
二元樹節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)定義為:
struct BinaryTreeNode // a node in the binary tree
{
int m_nValue; // value of node
BinaryTreeNode *m_pLeft; // left child of node
BinaryTreeNode *m_pRight; // right child of node
};
11、給出倆個(gè)單向鏈表的頭指針,比如h1,h2,判斷這倆個(gè)鏈表是否相交。為了簡(jiǎn)化問題,我們假設(shè)倆個(gè)鏈表均不帶環(huán)。
問題擴(kuò)展:
(1) 如果鏈表可能有環(huán)列?
(2) 如果需要求出倆個(gè)鏈表相交的第一個(gè)節(jié)點(diǎn)列?
12、輸入一個(gè)整數(shù)數(shù)組,判斷該數(shù)組是不是某二元查找樹的后序遍歷的結(jié)果。
如果是返回true,否則返回false。
例如輸入5、7、6、9、11、10、8,由于這一整數(shù)序列是如下樹的后序遍歷結(jié)果:
8
/ \
6 10
/ \ / \
5 7 9 11
因此返回true。
如果輸入7、4、6、5,沒有哪棵樹的后序遍歷的結(jié)果是這個(gè)序列,因此返回false。
13、如果我們把二叉樹看成一個(gè)圖,父子節(jié)點(diǎn)之間的連線看成是雙向的,我們姑且定義"距離"為兩節(jié)點(diǎn)之間邊的個(gè)數(shù)。
寫一個(gè)程序,求一棵二叉樹中相距最遠(yuǎn)的兩個(gè)節(jié)點(diǎn)之間的距離。
14、輸入一個(gè)單向鏈表,輸出該鏈表中倒數(shù)第k個(gè)結(jié)點(diǎn)。鏈表的倒數(shù)第0個(gè)結(jié)點(diǎn)為鏈表的尾指針。
鏈表結(jié)點(diǎn)定義如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
15、輸入一顆二元查找樹,將該樹轉(zhuǎn)換為它的鏡像,即在轉(zhuǎn)換后的二元查找樹中,左子樹的結(jié)點(diǎn)都大于右子樹的結(jié)點(diǎn)。
用遞歸和循環(huán)兩種方法完成樹的鏡像轉(zhuǎn)換。
例如輸入:
8
/ \
6 10
/\ /\
5 7 9 11
輸出:
8
/ \
10 6
/ \/ \
11 97 5
定義二元查找樹的結(jié)點(diǎn)為:
struct BSTreeNode
{
int m_nValue; // value of node
BSTreeNode *m_pLeft; // left child of node
BSTreeNode *m_pRight; // right child of node
}; [參考]
16、求一個(gè)二叉樹中任意兩個(gè)節(jié)點(diǎn)間的最大距離,兩個(gè)節(jié)點(diǎn)的距離的定義是 這兩個(gè)節(jié)點(diǎn)間邊的個(gè)數(shù)。
比如某個(gè)孩子節(jié)點(diǎn)和父節(jié)點(diǎn)間的距離是1,和相鄰兄弟節(jié)點(diǎn)間的距離是2,優(yōu)化時(shí)間空間復(fù)雜度。
17、求一個(gè)有向連通圖的割點(diǎn),割點(diǎn)的定義是,如果除去此節(jié)點(diǎn)和與其相關(guān)的邊,有向圖不再連通,描述算法。
18、設(shè)計(jì)一個(gè)棧結(jié)構(gòu),滿足一下條件:min,push,pop操作的時(shí)間復(fù)雜度為O(1)。
19、請(qǐng)修改append函數(shù),利用這個(gè)函數(shù)實(shí)現(xiàn):
兩個(gè)非降序鏈表的并集,1->2->3 和 2->3->5 并為 1->2->3->5
另外只能輸出結(jié)果,不能修改兩個(gè)鏈表的數(shù)據(jù)。
20、遞歸和非遞歸倆種方法實(shí)現(xiàn)二叉樹的前序遍歷。
21、輸入一棵二元樹的根結(jié)點(diǎn),求該樹的深度。
從根結(jié)點(diǎn)到葉結(jié)點(diǎn)依次經(jīng)過(guò)的結(jié)點(diǎn)(含根、葉結(jié)點(diǎn))形成樹的一條路徑,最長(zhǎng)路徑的長(zhǎng)度為樹的深度。
22、用倆個(gè)棧實(shí)現(xiàn)隊(duì)列,某隊(duì)列的聲明如下:
template class CQueue
{
public:
CQueue() {}
~CQueue() {}
void appendTail(const T& node); // append a element to tail
void deleteHead(); // remove a element from head
private:
T m_stack1;
T m_stack2;
};
23、給定鏈表的頭指針和一個(gè)結(jié)點(diǎn)指針,在O(1)時(shí)間刪除該結(jié)點(diǎn)。鏈表結(jié)點(diǎn)的定義如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
函數(shù)的聲明如下:void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted);
24、兩個(gè)單向鏈表,找出它們的第一個(gè)公共結(jié)點(diǎn)。
鏈表的結(jié)點(diǎn)定義為:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
25、用遞歸顛倒一個(gè)棧。例如輸入棧{1, 2, 3, 4, 5},1在棧頂。顛倒之后的棧為{5, 4, 3, 2, 1},5處在棧頂。
26、二叉樹的結(jié)點(diǎn)定義如下:
struct TreeNode
{
int m_nvalue;
TreeNode* m_pLeft;
TreeNode* m_pRight;
};
輸入二叉樹中的兩個(gè)結(jié)點(diǎn),輸出這兩個(gè)結(jié)點(diǎn)在數(shù)中最低的共同父結(jié)點(diǎn)。
27、有一個(gè)復(fù)雜鏈表,其結(jié)點(diǎn)除了有一個(gè)m_pNext指針指向下一個(gè)結(jié)點(diǎn)外,還有一個(gè)m_pSibling指向鏈表中的任一結(jié)點(diǎn)或者NULL。
其結(jié)點(diǎn)的C++定義如下:
struct ComplexNode
{
int m_nValue;
ComplexNode* m_pNext;
ComplexNode* m_pSibling;
};
下圖是一個(gè)含有5個(gè)結(jié)點(diǎn)的該類型復(fù)雜鏈表。
圖中實(shí)線箭頭表示m_pNext指針,虛線箭頭表示m_pSibling指針。為簡(jiǎn)單起見,指向NULL的指針沒有畫出。
請(qǐng)完成函數(shù)ComplexNode* Clone(ComplexNode* pHead),以復(fù)制一個(gè)復(fù)雜鏈表。
28、給定單鏈表、檢測(cè)是否有環(huán)。
29、給定兩個(gè)單鏈表(head1, head2),檢測(cè)兩個(gè)鏈表是否有交點(diǎn),如果有返回第一個(gè)交點(diǎn)。
30、給定單鏈表(head),如果有環(huán)的話請(qǐng)返回從頭結(jié)點(diǎn)進(jìn)入環(huán)的第一個(gè)節(jié)點(diǎn)。
31、只給定單鏈表中某個(gè)結(jié)點(diǎn)p(并非最后一個(gè)結(jié)點(diǎn),即p->next!=NULL)指針,刪除該結(jié)點(diǎn)。
32、只給定單鏈表中某個(gè)結(jié)點(diǎn)p(非空結(jié)點(diǎn)),在p前面插入一個(gè)結(jié)點(diǎn)。
33、編寫實(shí)現(xiàn)鏈表排序的一種算法。說(shuō)明為什么你會(huì)選擇用這樣的方法?
34、編寫實(shí)現(xiàn)數(shù)組排序的一種算法。說(shuō)明為什么你會(huì)選擇用這樣的方法?
35、怎樣編寫一個(gè)程序,把一個(gè)有序整數(shù)數(shù)組放到二叉樹中?
【數(shù)組和集合】
1、有一個(gè)整數(shù)數(shù)組,請(qǐng)求出兩兩之差絕對(duì)值最小的值。
2、一個(gè)整數(shù)數(shù)列,元素取值可能是1~N(N是一個(gè)較大的正整數(shù))中的任意一個(gè)數(shù),相同數(shù)值不會(huì)重復(fù)出現(xiàn)。
設(shè)計(jì)一個(gè)算法,找出數(shù)列中符合條件的數(shù)對(duì)的個(gè)數(shù),滿足數(shù)對(duì)中兩數(shù)的和等于N+1。復(fù)雜度不能為O(n2)。
3、給定一個(gè)集合A=[0,1,3,8](該集合中的元素都是在0,9之間的數(shù)字,但未必全部包含),指定任意一個(gè)正整數(shù)K,
請(qǐng)用A中的元素組成一個(gè)大于K的最小正整數(shù)。比如,A=[1,0] K=21 那么輸出結(jié)構(gòu)應(yīng)該為100。
4、一個(gè)有序數(shù)列,序列中的每一個(gè)值都能夠被2或者3或者5所整除,1是這個(gè)序列的第一個(gè)元素。求第1500個(gè)值是多少?
5、1-1000放在含有1001個(gè)元素的數(shù)組中,只有唯一的一個(gè)元素值重復(fù),其它均只出現(xiàn)一次。
每個(gè)數(shù)組元素只能訪問一次,設(shè)計(jì)一個(gè)算法,將它找出來(lái),不用輔助存儲(chǔ)空間。
6、一個(gè)含n個(gè)元素的整數(shù)數(shù)組至少存在一個(gè)重復(fù)數(shù),請(qǐng)編程實(shí)現(xiàn),在O(n)時(shí)間內(nèi)找出其中任意一個(gè)重復(fù)數(shù)。
7、輸入a1,a2,...,an,b1,b2,...,bn, 在O(n)的時(shí)間,O(1)的空間將這個(gè)序列順序改為a1,b1,a2,b2,a3,b3,...,an,bn,
且不需要移動(dòng),通過(guò)交換完成,只需一個(gè)交換空間。
8、給定一個(gè)存放整數(shù)的數(shù)組,重新排列數(shù)組使得數(shù)組左邊為奇數(shù),右邊為偶數(shù)。
要求:空間復(fù)雜度O(1),時(shí)間復(fù)雜度為O(n)。
9、輸入一個(gè)整形數(shù)組,數(shù)組里有正數(shù)也有負(fù)數(shù)。數(shù)組中連續(xù)的一個(gè)或多個(gè)整數(shù)組成一個(gè)子數(shù)組,每個(gè)子數(shù)組都有一個(gè)和。
求所有子數(shù)組的和的最大值。要求時(shí)間復(fù)雜度為O(n)。
例如:輸入的數(shù)組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數(shù)組為3, 10, -4, 7, 2,因此輸出為該子數(shù)組的和18。
10、輸入一個(gè)已經(jīng)按升序排序過(guò)的數(shù)組和一個(gè)數(shù)字,在數(shù)組中查找兩個(gè)數(shù),使得它們的和正好是輸入的那個(gè)數(shù)字。
要求:時(shí)間復(fù)雜度是O(n)。如果有多對(duì)數(shù)字的和等于輸入的數(shù)字,輸出任意一對(duì)即可。
例如:輸入數(shù)組1、2、4、7、11、15和數(shù)字15。由于4+11=15,因此輸出4和11。
11、有兩個(gè)序列a,b,大小都為n,序列元素的值任意整數(shù),無(wú)序;
要求:通過(guò)交換a,b中的元素,使[序列a元素的和]與[序列b元素的和]之間的差最小。
例如:
var a=[100,99,98,1,2, 3];
var b=[1, 2, 3, 4,5,40];
12、求一個(gè)矩陣中最大的二維矩陣(元素和最大)。如:
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的是:
4 5
5 3
要求:(1)寫出算法;(2)分析時(shí)間復(fù)雜度;(3)用C寫出關(guān)鍵代碼。
13、一個(gè)整數(shù)數(shù)組,長(zhǎng)度為n,將其分為m份,使各份的和相等,求m的最大值。
比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1;
{3,6}{2,4,3} m=2
{3,3}{2,4}{6} m=3 所以m的最大值為3
14、求一個(gè)數(shù)組的最長(zhǎng)遞減子序列 比如{9,4,3,2,5,4,3,2}的最長(zhǎng)遞減子序列為{9,5,4,3,2}
15、如何對(duì)n個(gè)數(shù)進(jìn)行排序,要求時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)。
16、輸入一個(gè)正數(shù)n,輸出所有和為n連續(xù)正數(shù)序列。
例如:輸入15,由于1+2+3+4+5=4+5+6=7+8=15,所以輸出3個(gè)連續(xù)序列1-5、4-6和7-8。
17、給定一個(gè)存放整數(shù)的數(shù)組,重新排列數(shù)組使得數(shù)組左邊為奇數(shù),右邊為偶數(shù)。
要求:空間復(fù)雜度O(1),時(shí)間復(fù)雜度為O(n)。
18、一個(gè)整型數(shù)組里除了兩個(gè)數(shù)字之外,其他的數(shù)字都出現(xiàn)了兩次。
請(qǐng)寫程序找出這兩個(gè)只出現(xiàn)一次的數(shù)字。要求時(shí)間復(fù)雜度是O(n),空間復(fù)雜度是O(1)。
19、輸入一個(gè)正整數(shù)數(shù)組,將它們連接起來(lái)排成一個(gè)數(shù),輸出能排出的所有數(shù)字中最小的一個(gè)。
例如輸入數(shù)組{32, 321},則輸出這兩個(gè)能排成的最小數(shù)字32132。
請(qǐng)給出解決問題的算法,并證明該算法。
20、把一個(gè)數(shù)組最開始的若干個(gè)元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)。
輸入一個(gè)排好序的數(shù)組的一個(gè)旋轉(zhuǎn),輸出旋轉(zhuǎn)數(shù)組的最小元素。
例如數(shù)組{3, 4, 5, 1, 2}為{1, 2, 3, 4, 5}的一個(gè)旋轉(zhuǎn),該數(shù)組的最小值為1。
21、數(shù)組中有一個(gè)數(shù)字出現(xiàn)的次數(shù)超過(guò)了數(shù)組長(zhǎng)度的一半,找出這個(gè)數(shù)字。
22、一個(gè)int數(shù)組,里面數(shù)據(jù)無(wú)任何限制,要求求出所有這樣的數(shù)a[i],其左邊的數(shù)都小于等于它,右邊的數(shù)都大于等于它。
能否只用一個(gè)額外數(shù)組和少量其它空間實(shí)現(xiàn)。
23、在一個(gè)int數(shù)組里查找這樣的數(shù),它大于等于左側(cè)所有數(shù),小于等于右側(cè)所有數(shù)。
24、求隨機(jī)數(shù)構(gòu)成的數(shù)組中找到長(zhǎng)度大于=3的最長(zhǎng)的等差數(shù)列,輸出等差數(shù)列由小到大。
格式:
輸入[1,3,0,5,-1,6]
輸出[-1,1,3,5]
要求時(shí)間復(fù)雜度,空間復(fù)雜度盡量小。
25、遞歸法求數(shù)組中的最大值。[參考]
26、用遞歸的方法判斷整數(shù)組a[N]是不是升序排列。
27、計(jì)算數(shù)組中連續(xù)元素和的最大值。[參考]
【其它】
1、1024!末尾有多少個(gè)0?[參考]
2、編程實(shí)現(xiàn)兩個(gè)正整數(shù)的除法(不能用除法操作符)。
3、請(qǐng)定義一個(gè)宏,比較兩個(gè)數(shù)a、b的大小,不能使用大于、小于、if語(yǔ)句。
4、兩個(gè)數(shù)相乘,小數(shù)點(diǎn)后位數(shù)沒有限制,請(qǐng)寫一個(gè)高精度算法。
5、編程實(shí)現(xiàn)把十進(jìn)制數(shù)(long型)分別以二進(jìn)制和十六進(jìn)制形式輸出,不能使用printf系列。
6、輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。
例如:如果輸入如下矩陣:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
則依次打印出數(shù)字1, 2, 3, 4, 8, 12, 16, 15, 14, 13, 9, 5, 6, 7, 11, 10。
7、用1、2、2、3、4、5這六個(gè)數(shù)字,寫一個(gè)main函數(shù),打印出所有不同的排列。
如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連。
8、求兩個(gè)或N個(gè)數(shù)的最大公約數(shù)和最小公倍數(shù)。
9、如果一個(gè)整數(shù)能夠表示成兩個(gè)或多個(gè)素?cái)?shù)之和,則得到一個(gè)素?cái)?shù)和分解式。
對(duì)于一個(gè)給定的整數(shù),輸出所有這種素?cái)?shù)和分解式。
注意,對(duì)于同構(gòu)的分解只輸出一次(比如5只有一個(gè)分解2 + 3,而3 + 2是2 + 3的同構(gòu)分解式)。
例如,對(duì)于整數(shù)8,可以作為如下三種分解:
(1) 8 = 2 + 2 + 2 + 2
(2) 8 = 2 + 3 + 3
(3) 8 = 3 + 5
10、輸入n個(gè)整數(shù),輸出其中最小的k個(gè)。
例如輸入1,2,3,4,5,6,7和8這8個(gè)數(shù)字,則最小的4個(gè)數(shù)字為1,2,3和4。
11、求1+2+…+n
要求不能使用乘除法、for、while、if、else、switch、case等關(guān)鍵字以及條件判斷語(yǔ)句(A ? B : C)。
12、定義Fibonacci數(shù)列如下:
0 if n = 0
f(n)= 1 if n = 1
f(n-1)+f(n-2) if n >= 2
輸入n,用最快的方法求該數(shù)列的第n項(xiàng)。[參考]
13、輸入兩個(gè)整數(shù) n 和 m,從數(shù)列1,2,3.......n 中 隨意取幾個(gè)數(shù),使其和等于m。
要求將其中所有的可能組合列出來(lái)。
14、輸入一個(gè)整數(shù)n,求從1到n這n個(gè)整數(shù)的十進(jìn)制表示中1出現(xiàn)的次數(shù)。
15、對(duì)于一個(gè)整數(shù)矩陣,存在一種運(yùn)算,對(duì)矩陣中任意元素加一時(shí),需要其相鄰(上下左右)某一個(gè)元素也加一。
現(xiàn)給出一正數(shù)矩陣,判斷其是否能夠由一個(gè)全零矩陣經(jīng)過(guò)上述運(yùn)算得到。
16、四對(duì)括號(hào)可以有多少種匹配排列方式?比如兩對(duì)括號(hào)可以有兩種:()()和(())
17、我們把只包含因子2、3和5的數(shù)稱作丑數(shù)(Ugly Number)。
例如:6、8都是丑數(shù),但14不是,因?yàn)樗蜃?。習(xí)慣上我們把1當(dāng)做是第一個(gè)丑數(shù)。
求按從小到大的順序的第1500個(gè)丑數(shù)。
18、輸入數(shù)字n,按順序輸出從1最大的n位10進(jìn)制數(shù)。比如輸入3,則輸出1、2、3一直到最大的3位數(shù)即999。
19、大整數(shù)數(shù)相乘的問題。
總結(jié)
以上是生活随笔為你收集整理的求单链表的最大值与原地逆转_计算机笔试面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java添加、读取Excel公式
- 下一篇: “无人区”行驶8年,李诞的脱口秀路在何方