1539 第K個缺失的正整數

2021-10-22 10:32:54 字數 901 閱讀 9700

給你乙個 嚴格公升序排列 的正整數陣列 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 示例 ...