原创 【操作系統】實現生產者消費者模型

最近在複習操作系統,隨手寫兩種Java實現生產者消費者模型的方式 一、信號量 import java.util.Queue; import java.util.Random; import java.util.concurrent

原创 【算法題】和爲S的連續正數序列

題目描述 小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和爲100(至少包括兩個數)。沒多久,他就得到另一組連續正數和爲10

原创 【算法題】兩個鏈表的第一個公共結點

題目描述 輸入兩個鏈表,找出它們的第一個公共結點。(注意因爲傳入數據是鏈表,所以錯誤測試數據的提示是用其他方式顯示的,保證傳入數據是正確的) 分析 先遍歷一次兩個鏈表,找到較長的,讓該鏈表指針先走delta步,較短鏈表從頭開始走,

原创 【算法題】設計LRU緩存

題目描述 運用你所掌握的數據結構,設計和實現一個 LRU (最近最少使用) 緩存機制。它應該支持以下操作: 獲取數據 get 和 寫入數據 put 。 獲取數據 get(key) - 如果密鑰 (key) 存在於緩存中,則獲取

原创 【算法題】鏈表中環的入口結點

題目描述 給一個鏈表,若其中包含環,請找出該鏈表的環的入口結點,否則,輸出null。 分析 要判斷鏈表是否有環直接用快慢指針即可,但如何找到入口結點呢? 畫個草圖分析一下: 快慢指針在紅色標記處相遇,則有如下等式成立: 2(A+

原创 【算法題】醜數

題目描述 把只包含質因子2、3和5的數稱作醜數(Ugly Number)。例如6、8都是醜數,但14不是,因爲它包含質因子7。 習慣上我們把1當做是第一個醜數。求按從小到大的順序的第N個醜數。 分析 醜數可以分解成2a3b5c的形

原创 【操作系統】進程間通信的6種方式

一、管道 UNIX 系統IPC最古老的形式。 特點: 只支持半雙工通信(單向交替傳輸) 只能在父子進程或兄弟進程之間通信 只存在於內存中,不屬於任何文件系統 二、命名管道(FIFO) 常用於C/S應用程序中,FIFO 用作匯

原创 【算法題】機器人的運動範圍

題目描述 地上有一個m行和n列的方格。一個機器人從座標0,0的格子開始移動,每一次只能向左,右,上,下四個方向移動一格,但是不能進入行座標和列座標的數位之和大於k的格子。 例如,當k爲18時,機器人能夠進入方格(35,37),因

原创 【算法題】對稱的二叉樹

題目描述 請實現一個函數,用來判斷一顆二叉樹是不是對稱的。注意,如果一個二叉樹同此二叉樹的鏡像是同樣的,定義其爲對稱的。 分析 本題比較簡單,思想是鏡像比較,即左孩子結點與右孩子結點比較,右孩子結點與左孩子結點比較,直到遍歷全

原创 【算法題】數據流中的中位數

題目描述 如何得到一個數據流中的中位數?如果從數據流中讀出奇數個數值,那麼中位數就是所有數值排序之後位於中間的數值。如果從數據流中讀出偶數個數值,那麼中位數就是所有數值排序之後中間兩個數的平均值。我們使用Insert()方法讀取

原创 【算法題】矩陣中的路徑

題目描述 分析 利用回溯法,從矩陣任一點開始,向四周試探,若滿足字符順序,則走一步並繼續試探,直到字符串搜索結束返回true。如果都不滿足,則回溯繼續搜索。由於不能重複走同一個格子,需要一個額外的布爾數組記錄走過的路徑,同時,在

原创 【算法題】序列化二叉樹

題目描述 請實現兩個函數,分別用來序列化和反序列化二叉樹 二叉樹的序列化是指:把一棵二叉樹按照某種遍歷方式的結果以某種格式保存爲字符串,從而使得內存中建立起來的二叉樹可以持久保存。序列化可以基於先序、中序、後序、層序的二叉樹遍歷

原创 【算法題】二叉樹的下一個結點

題目描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。 分析 暴力求解法:根據父結點指針找到根結點,進行中序遍歷找到下一個結點即可,時間

原创 【算法題】剪繩子

題目描述 給你一根長度爲n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1),每段繩子的長度記爲k[0],k[1],…,k[m]。請問k[0]xk[1]x…xk[m]可能的最大乘積是多少?例如,當繩子的長度是8

原创 【算法題】數組中只出現一次的數字

題目描述 一個整型數組裏除了兩個數字之外,其他的數字都出現了兩次。請寫程序找出這兩個只出現一次的數字。 分析 要解這題需要對異或操作有比較深的理解。 依次將數組中所有元素進行異或得到a,即num1和num2的異或。然後取a中二