當前位置: 妍妍網 > 碼農

為啥互聯網公司裏很少有山東大學的?網友回復出奇一致~

2024-03-19碼農

近在網上沖浪的時候,我發現了一個有意思的討論: 互聯網公司裏為啥很少有山東大學呢? 這個問題我有點好奇萬能的網友們會怎麽說,於是進去看了看,沒想到網友回答出奇一致。

貼文裏,有個網友表示,幾家公司了,但他竟然一個山大的學生都沒遇見過。我仔細想了下,似乎真的很少聽說山東大學出身的互聯網從業者。

不過,一個人的社交圈有限,能接觸到的同事和行業內的人也就那麽多,你沒看到,不代表沒有。但是網友們的回答卻出奇的一致:山東大學的大部份去考公了。

透過網友的回復,可以看到這種趨勢確實存在。但也有網友回答有很多啊,可能只是你沒碰到。

所以,互聯網行業並不是沒有山東大學的從業者。只不過,相比之下比較少。

下面是今日大廠演算法題

今日演算法題,來自LeetCode的第21題:合並兩個有序連結串列,下面是我的演算法思路及實作,讓我們來看看吧。

# 演算法題目

將兩個升序連結串列合並為一個新的 升序 連結串列並返回。新連結串列是透過拼接給定的兩個連結串列的所有節點組成的。

# 演算法思路

  1. 建立一個啞節點:這個啞節點將作為結果連結串列的起始節點,這樣可以簡化邊界條件的處理,最後返回它的下一個節點作為合並後的連結串列頭。

  2. 叠代比較:比較兩個連結串列當前節點的值,將較小值的節點接在結果連結串列的後面,並移動該連結串列的指標到下一個節點。

  3. 連線剩余部份:如果兩個連結串列的長度不同,將較長連結串列的剩余部份直接接在結果連結串列的後面。

  4. 返回結果:返回啞節點的下一個節點,即合並後連結串列的頭節點。

# 程式碼實作

C語言實作

#include<stdlib.h>structListNode {int val;structListNode *next;};struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){structListNodedummy;structListNode *tail = &dummy; dummy.next = NULL;while (l1 && l2) {if (l1->val < l2->val) { tail->next = l1; l1 = l1->next; } else { tail->next = l2; l2 = l2->next; } tail = tail->next; } tail->next = l1 ? l1 : l2;return dummy.next;}


Java實作

public classListNode{ int val; ListNode next; ListNode() {} ListNode(int val) { this.val = val; } ListNode(int val, ListNode next) { this.val = val; this.next = next; }}public classSolution{public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dummy = new ListNode(-1); ListNode tail = dummy;while (l1 != null && l2 != null) {if (l1.val < l2.val) { tail.next = l1; l1 = l1.next; } else { tail.next = l2; l2 = l2.next; } tail = tail.next; } tail.next = l1 != null ? l1 : l2;return dummy.next; }}

Python實作

classListNode:def__init__(self, val=0, next=None):self.val = valself.next = nextdefmerge_two_lists(l1, l2): dummy = ListNode() tail = dummywhile l1 andl2:if l1.val < l2.val: tail.next = l1 l1 = l1.nextelse: tail.next = l2 l2 = l2.next tail = tail.next tail.next = l1 if l1 else l2return dummy.next

# 演算法解析

這個演算法的時間復雜度是O(n+m),其中n和m分別是兩個連結串列的長度。這是因為我們只需要一次遍歷就能完成合並。空間復雜度是O(1),我們只需要常數空間儲存幾個指標。

# 範例和測試

假設有兩個連結串列 l1: 1->2->4 和 l2: 1->3->4,合並後的連結串列是 1->1->2->3->4->4。

# 總結

合並兩個有序連結串列是一個非常基礎且實用的連結串列操作問題,它不僅能幫助我們熟悉連結串列的基本操作,還能訓練我們使用指標進行有效的連結串列操作。

熱門推薦