給你乙個 嚴格公升序排列 的正整數陣列 arr 和乙個整數 k 。
請你找到這個陣列裡第 k 個缺失的正整數。
示例 1:
輸入:arr = [2,3,4,7,11], k = 5
輸出:9
解釋:缺失的正整數包括 [1,5,6,8,9,10,12,13,…] 。第 5 個缺失的正整數為 9 。
我的想法:用乙個2000個長的map儲存數字出現的次數,出現為0就是缺失的。然後遍歷它,第k個缺失的就是那個雜湊下標。
class
solution
for(
int i=
0;i)for
(int i=
1;i<
2001
;i++)if
(cnt==k)
}return ans;}}
;
但是很奇怪,明明是線性複雜度,卻只擊敗了百分之5的人。
解法2:利用arr[i]與其下標i關係
不難發現,乙個不缺失元素的序列,會有arr[i]=i+1這樣的關係,而在缺失元素之後,會有arr[i]>i+1,簡單移項可得 arr[i]-i-1 > 0,缺失乙個的時候,相差1,兩個則相差2,以此類推,缺失越多,兩者差距越大,我們要找第k個缺失的,換言之,只要arr[i]-i-1 == k,我們便找到了題目要找的數字。
class solution
}return k+i;//亦可寫成:k+n,只不過寫成k+i方便理解下面乙個解法}};
二分查詢
然而上述的解法沒有用上題目給出的條件 嚴格公升序排列,已經找出了 arr[i]-i-1 > 0關係之後,我們可以利用上述的線性查詢的方式改為二分查詢的方式。
class solution else
}return k + left;}};
1539 第 k 個缺失的正整數
題目描述 給你乙個 嚴格公升序排列 的正整數陣列 arr 和乙個整數 k 請你找到這個陣列裡第 k 個缺失的正整數。示例 1 輸入 arr 2,3,4,7,11 k 5 輸出 9 解釋 缺失的正整數包括 1,5,6,8,9,10,12,13,第 5 個缺失的正整數為 9 示例 2 輸入 arr 1,...
leetcode1539 第k個缺失的正整數
思路1 暴力列舉。實現1 1 class solution214 15return res 16 17 思路2 根據陣列中元素的數值大小和所在位置的相對關係計算答案。實現2 1 class solution214 return arr n 1 k cnt 15 16 思路3 在思路2的基礎上更進一步...
求乙個陣列中第 k 個缺失的正整數
1359第 k 個缺失的正整數,給你乙個 嚴格公升序排列 的正整數陣列 arr 和乙個整數 k 請你找到這個陣列裡第 k 個缺失的正整數。示例 1 輸入 arr 2,3,4,7,11 k 5 輸出 9 解釋 缺失的正整數包括 1,5,6,8,9,10,12,13,第 5 個缺失的正整數為 9 示例 ...