1.鍊錶逆序
2.鍊錶合併
3.一棵樹是否某條路徑結點之和等於給定值。並描述演算法複雜度
4.你熟悉的排序演算法並描述演算法複雜度。
快速排序
歸併排序
堆排序
選擇排序
插入排序
氣泡排序
折半插入排序
以下**都能成功通過。
1.鍊錶逆序
#include using namespace std;
struct node
;node* make_link(void);
node* reverse(node*);
void display(node *);
int main()
node* make_link(void)
return head;
}node* reverse(node *head)
head->next=null;
return pre;
}void display(node * head)
coutstruct node
;node *make_list(void);
void display(node *);
void sort(node *);
node *merge(node *,node *);
int main()
node *make_list(void)
return head;
}void display(node *head)
coutwhile(cur2)
int temp=cur->value;
cur->value=min->value;
min->value=temp;
cur=cur->next;
}}node *merge(node *h1,node *h2)
else
}if(cur1)
mcur->next=cur1;
else
mcur->next=cur2;
return h1->value < h2->value ? h1:h2;
}
3.一棵樹是否某條路徑結點之和等於給定值。並描述演算法複雜度
#include using namespace std;
struct node
;node * build_tree(void);
bool find(node *,int);
int main()
4.你熟悉的排序演算法並描述演算法複雜度。
快速排序
#include using namespace std;
int partition(int a,int low,int high)
while(low < high && a[low] <= key)
++low;
}return low; //返回杻軸所在的位置
}void qsort(int a,int b,int e)
}int main()
; qsort(a,0,5);
for(int i=0;i<6;i++)
coutvoid display(int a,int size)
for (i=length-1; i>0; i--)
}//testcase
int main()
; heapsortdata(sortdata, 8);
for (int i=0; i<8; i++)
}int main()
; for(int i=0;i<8;i++)
cout
for(int i=0;i<8;i++)
cout
}
C 經典演算法面試題
static intsum int x static void sort int nums console.writeline nums i 字典的定義 必須包含名空間system.collection.generic dictionary裡面的每乙個元素都是乙個鍵值對 由二個元素組成 鍵和值 鍵必...
經典演算法面試題
1 說是有乙個文字檔案,大約有一萬行,每行乙個詞,要求統計出其中最頻繁出現的前十個詞。先用雜湊,統計每個詞出現的次數,然後用在n個數中找出前k大個數的方法找出出現次數最多的前10個詞。2 如題1,但是這次檔案特別大,沒有辦法一次讀入記憶體。1 直接排序,寫檔案時,同時寫入字串及其出現次數。2 可以用...
經典演算法面試題
維護乙個1000個節點的小頂堆。時間複雜度o nlogk 具體步驟 1 將k個陣列的第乙個元素取出來,維護乙個小頂堆。2 彈出堆頂元素存入結果陣列中,並把該元素所在陣列的下乙個元素取出來壓入隊中。3 調整堆的結構,使其滿足小頂堆的定義。4 重複 2 3 直到合併完成。動態規劃 dp n m 表示n被...