ST工程類筆試題

1

1.面試中出這樣的題,算你狠。

參考:如何使用C++11實現跨平臺的定時器timer? ; Linux 下定時器的實現方式分析

2.兩種思路。

一是算出所有的4N 中sum,然後在裏面找出第k小的sum,這種方法時間複雜度太高,根本吃不消;還有一條思路是不必把所有的sum都算出來,只算出前k個就直接找到了第k小的sum,這樣做首先要把每個數組的4個元素排序,然後呢,,,我還沒想好。
3

三.

1.頭插法建立單鏈表。

實現代碼:

Node* ReverseList(Node* head) {
    Node* prev = NULL;  //指向上一個結點
    Node* curr = head;  //指向當前結點
    while (curr) {
        Node* next = curr->next;   //指向下一個結點
        curr->next = prev;   //關鍵步
        prev = curr;
        curr = next;
    }
    return prev;
}

測試用例:

Node node5 = { 5, NULL };
Node node4 = { 4, &node5 };
Node node3 = { 3, &node4 };
Node node2 = { 2, &node3 };
Node node1 = { 1, &node2 };

2.直接使用STL裏的sort()函數來做

,其中排序方法通過自定義一個函數對象來完成。

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
struct Item {
    string name;  //學生姓名的字符串
    int english_score;   //英語分數
};
class MyLess {
public:
    bool operator() (Item a, Item b) {
        return a.english_score<b.english_score;
    }
};

int main() {
    Item st[] = { { "fengzi", 98 },{ "midan", 30 },{ "xiaoyu", 100 },{ "asi", 60 },{ "huazhou", 59 },{ "jimu", 70 } };
    sort(st, st + 6, MyLess());
    for (int i = 0; i<6; i++) {
        cout << st[i].name << " ";
    }
    return 0;
}
發佈了419 篇原創文章 · 獲贊 248 · 訪問量 125萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章