原创 堆排序

通過數組來表示一個堆 如何排序呢? 第一步:創造初始堆,就是先選中最後一個非葉子結點,從右到左,從下往上,進行循環,我們做個小頂堆,那麼先判斷,當前這個非葉子節點的左孩子是否小於這個非葉子結點,如果大於,那麼查看右葉子結點,如果小

原创 死鎖產生的條件,以及如何避免死鎖,產生死鎖時該怎樣避免

產生死鎖的四個條件 1.互斥: 資源x的任意一個時刻只能被一個線程持有 2.佔有且等待:線程1佔有資源x的同時等待資源y,並不釋放x 3.不可搶佔:資源x一旦被線程1佔有,其他線程不能搶佔x 4.循環等待:線程1持有x,等待y,線

原创 鏈表的迴文結構

題目描述 對於一個鏈表,請設計一個時間複雜度爲O(n),額外空間複雜度爲O(1)的算法,判斷其是否爲迴文結構。 給定一個鏈表的頭指針A,請返回一個bool值,代表其是否爲迴文結構。保證鏈表長度小於等於900。 測試樣例: 1->2

原创 刪除鏈表中重複的結點

題目描述 在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,重複的結點不保留,返回鏈表頭指針。 例如,鏈表1->2->3->3->4->4->5 處理後爲 1->2->5 思路 我們可以利用HashSet的不可重複特

原创 二叉樹的前中後序遍歷

1.前序遍歷 前序遍歷(DLR,lchild,data,rchild),是二叉樹遍歷的一種,也叫做先根遍歷、先序遍歷、前序周遊,可記做根左右。前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。 前序遍歷首先訪問根結點然後遍歷左

原创 相交鏈表

題目描述 編寫一個程序,找到兩個單鏈表相交的起始節點。 如圖 相交結點爲c1 輸入AB兩個鏈表 輸出c1結點 思路 可以利用數組,將其中一個鏈表的所有結點引用都存進去,然後再用另一個鏈表進行循環判斷,遇到相同的引用即說明存在交點,

原创 重建二叉樹(根據前序和中序遍歷結果得到)

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重

原创 谷歌瀏覽器爲什麼要禁用Flash插件?深夜有感而發

剛剛在瀏覽博客,一個頁面的彈出窗口顯示adobe flash player已被屏蔽,而且和之前不同,之前可以選擇打開,現在我完全沒得選! 身爲一個95後🙂騷年,剛剛接觸電腦,是在二年級,我的父親從單位拿到了一臺殘破不堪的“金河田”

原创 鏈表分割

題目描述 編寫代碼,以給定值x爲基準將鏈表分割成兩部分,所有小於x的結點排在大於或等於x的結點之前 給定一個鏈表的頭指針 ListNode* pHead,請返回重新排列後的鏈表的頭指針。注意:分割以後保持原來的數據順序不變。 這個

原创 環形鏈表

題目描述 給定一個鏈表,判斷鏈表中是否有環。 爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。 思路 利用雙引用,就像同一個跑道,一

原创 環形鏈表II

題目描述 給定一個鏈表,返回鏈表開始入環的第一個節點。 如果鏈表無環,則返回 null。 爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有

原创 複製帶隨機指針的鏈表

題目描述 給定一個鏈表,每個節點包含一個額外增加的隨機指針,該指針可以指向鏈表中的任何節點或空節點。 要求返回這個鏈表的深拷貝 思路 建立一箇舊-新-舊-新的鏈表模型 新結點完全copy上一個舊結點,val,next,rand

原创 Java實現二維數組中的查找

題目描述 在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 首先在腦中建立這個二維數組

原创 鏈表中倒數第K個結點

題目描述 輸入一個鏈表,輸出該鏈表中倒數第k個結點。 上手不要先寫,應該先分析,畫圖分析。 首先判斷一下,如果是個空鏈表呢?那麼就直接return null; 非空鏈表的話 我們可以利用鏈表數組來存儲這個鏈表的每一個結點 那麼就獲

原创 鏈表的中間結點

給定一個帶有頭結點 head 的非空單鏈表,返回鏈表的中間結點。 如果有兩個中間結點,則返回第二個中間結點。 示例 1: 輸入:[1,2,3,4,5] 輸出:此列表中的結點 3 (序列化形式:[3,4,5]) 返回的結點值爲 3