之前在刷leetcode的時候碰到過類似的題目,但是要求解第k大的數,那麼只需要使用快慢指標,快指標先走k步,然後等快指標到達末尾時,慢指標指向的元素即為倒數第k的元素。
現在這個題目略有不同,是要求求煉表中前k個元素,顯然是大資料面試中的topk問題,可以建立乙個最小堆來解決這個問題,每次遍歷便將與堆頂元素比較,當大於堆頂元素時便插入堆,最後輸出所有堆中元素即可。
#include #include using namespace std;
struct node
};templateclass heap
heap(const t *data, int k)
void createheap(const t *a, int k)
}void adjustheap(int pa)
else }}
t& top()
void push(int& x)
void print()
else if (hp.top() < p->val)
}hp.print();
}void test()
; int len = sizeof(a) / sizeof(a[0]);
int k = 3;
gettopk(a, k, len);
}void testlist()
; int len = 7;
int k = 3;
for (int i=0;inext = vhead->next;
vhead->next = p;
//vhead->next = p;
//vhead = p;
}getlisttopk(ret->next, k, len);
}int main()
面試題 從尾到頭列印鍊錶 鍊錶中倒數第K個結點
從尾到頭列印鍊錶 鍊錶結構體 struct node pnode 思路 一般列印時不應該改變鍊錶本身的結構,也就是說第乙個遍歷到最後乙個,最後乙個節點第乙個輸出。後進先出,非遞迴應該用棧。遞迴 缺點 當鍊表過長時,會導致遞迴層次太深 從尾到頭列印鍊錶 void printlistreversingl...
鍊錶的面試題
1 比較順序表和煉表的優缺點,它們分別在什麼場景下使用?1 順序表支援隨機訪問,單鏈表不支援隨機訪問。2 順序表插入 刪除資料效率很低,時間複雜度為o n 除尾插和尾刪 單鏈表插入 刪除效率更高,時間複雜度為o 1 3 順序表的cpu高速緩衝效率更高,單鏈表cpu高速緩衝效率低。2 列印單向鍊錶 v...
鍊錶的面試題
slist.h include include include typedef int datatype typedef struct listnode node,pnode 生成乙個新結點 pnode buyslistnode datatype data 列印鍊錶 void printslist ...