演算法專題導航頁面
【演算法專題 - 應用場景】
《數字遊戲 – 尋找缺失的數字》
《尋找兩個排序陣列(長度相等)的上中位數》
【題目】
程式猿小明來自於乙個游牧家庭,家裡有乙個大大的牧場和成群結隊的牛羊,為了便於管理羊群,小明決定對每只綿羊進行編號標記,最終剛好用完100個號碼(1-100)。小明的日常生活簡單的有點枯燥:寫**,放牧,放牧的同時寫**!
如此,日復一日,年復一年,時間過得很快很快!
有一天,臨近傍晚收工時候,小明突然發現少了乙隻綿羊,但是無法確定是哪乙隻?
時間緊,任務重,你能否幫忙提供一種方法,能夠盡快找出丟失的是哪乙隻綿羊?
【其他限制】
無。【分析】
100只綿羊各不相同,都有自身的唯一編號。故此題可以轉化為:現有99個不重複的正數,其範圍是1-100,如何找出不存在的那乙個正數?
【解決方案】
假定用arrayint[99]來容納上述99個不重複元素。
時間複雜度o(nlogn),空間複雜度o(1)
a. 採用某種時間複雜度為o(nlogn)的排序演算法對99個正數排序(公升序)得到有序陣列arrayintsorted;
b. 對有序陣列arrayintsorted元素執行操作:arrayintsorted[j] - arrayintsorted[i] (j > i),一旦差值大於1,即表明缺失的數字介於元素arrayintsorted[i]與arrayintsorted[j]之間。也即缺失的數字為:arrayintsorted[i] + 1 或者 arrayintsorted[j] - 1。
時間複雜度o(1),空間複雜度o(n)
a. 採用雜湊表的方式,申請長度為100的輔助空間,以編號1-100為鍵,初始狀態雜湊表所有元素值都為1。也即假設所有的100個數字都存在。
b. 遍歷上述99個不重複元素,一旦相應的鍵存在,則刪除該鍵。最終雜湊表中剩下的那乙個鍵即為缺失的數字。
時間複雜度o(1),空間複雜度o(1)
仔細考慮,此問題是乙個區域性與整體問題:區域性 + 缺失數字 = 整體。至此,答案一目了然。有點腦筋急轉彎的意思~??
缺失的數字
給定乙個包含 0,1,2,n 中 n 個數的序列,找出 0 n 中沒有出現在序列中的那個數。示例 1 輸入 3,0,1 輸出 2示例 2 輸入 9,6,4,2,3,5,7,0,1 輸出 8package 陣列 auther kevin date classname numbermissing des...
64 缺失數字
題目描述 一開始擼出來的 class solution if nums 0 1 return nums i 1 後續改進的 直接使用兩個for迴圈,需要注意的是 第乙個for迴圈是將s這個布林陣列進行初始化,因為預設是false,第二個for迴圈是找出s這個陣列中的為false的下標,那麼就返回這個...
268 缺失數字
排序,不多解釋,估計都能想到。func missingnumber nums int int if nums 0 0for i 1 i len nums i return 1 借用雜湊表 不多說,估計也都能想到 func missingnumber nums int int for v range ...