一道百度筆試題的解決方案

2021-04-09 09:44:27 字數 2261 閱讀 2207

程式設計題:30分

共1題

注意:要求提供完整**,如果可以編譯執行酌情加分。

1.    一條1

百萬節點的單向鍊錶,鍊錶所有節點是按

value

字段從小到大的順序鏈結;下面是乙個節點的結構

typedef struct node_tnode_t;

node_t head;    /*

該單向鍊錶的頭節點,全域性變數

*/ 試設計程式:針對各個

group(0-->9)

,根據value

字段排序,輸出各組

top 10

的節點。(

top10

是從小到大,取後面的大值

top10.

)要求:儘量減少計算複雜度、遍歷次數,不允許大量的輔助記憶體

慚愧,寫了挺久才寫出來的程式:

#include

#include

#include

typedef struct node_t node_t;

typedef struct queuenode queuenode;

typedef struct queue_t queue_t;

void initqueuenode(queuenode *node,int value)

void initqueue(queue_t *q)

bool isfullqueue(queue_t *q)

void destroyqueue(queue_t *q)

q->front = q->rear = null;

q->size = 0;

delete q;}

int pushqueue(queue_t *q,int value)

queuenode *node = new queuenode();

initqueuenode(node,value);

if(q->rear == null)

q->rear = node;

else

if(q->front == null)

q->front = node;

q->size++;

return 1;}

int popqueue(queue_t *q)

queuenode *node;

node = q->front;

q->front = q->front->next;

delete node;

q->size--;

return 1;}

void init(node_t *p)}

int top[10][10],total[10];

node_t *head,*p;

node_t *temp;

int num;

queue_t *q[10];

void main()

p = new node_t();

head = p;

init(p);

p = head->pnext;

while(p)

pushqueue(q[p->group],p->value);

total[p->group] = total[p->group] == 10 ? 10 : total[p->group]+1;

p = p->pnext;}

for(i=0; i<10; i++)

cout << endl;}

p = head->pnext;

while(p)

delete head;

for(i=0; i<10; i++)}

應該說這個程式是比較完善的,用佇列儲存結果,沒有記憶體洩露

又看了一下,發現自己真是會給自己找事做,用佇列去儲存。。。唉,用陣列來儲存top10,最後做一次氣泡排序,多簡單

#include

#include

#include

typedef struct node_t node_t;

void init(node_t *p)}

int top[10][10],total[10],num[10];

node_t *head,*p;

node_t *temp;

void main()

for(i=0; i<10; i++)}}

}

for(i=0 ;i<10; i++)

delete head;

}

一道百度面試題

給出乙個整型陣列num,對其中的每個元素,輸出在它左側且比它小的最近元素,要求時間複雜度為o n 例如int num 2無左側最近元素 4左側最近的是2 1沒有 3左側最近的是1.分析 建立乙個棧,然後將陣列中的元素從右至左依次壓入棧中。對每個元素,入棧前先檢查棧頂元素是否比它大,若是的話,則該元素...

一道百度面試題

下面這段 是把中英文混合字串 漢字用兩個位元組表示,特點是第乙個位元組的最高位為1 中的大寫字母轉化為小寫字母,請找出其中的bug,注意各種異常情況。for char piterator szword piterator 0 piterator else if piterator a piterat...

百度一道面試題

我這裡複製的是原話,當然順序是不一定的,很多拿到題目第一反應就是用map,當然可以解決,但是效率不高。還有人覺得應該用演算法 我是沒想到用啥演算法好.還有覺得應該先排序.還有覺得用位圖.bitmap 等等方法!我都覺得麻煩,思維方式就是,從節省時間考慮,從陣列來看,我們都得遍歷一次陣列裡面的元素,那...