Re: [閒聊] 每日LeetCode已回收
1539. Kth Missing Positive Number
給你一個已經排序且嚴格遞增的整數陣列和一個數字k,返回第k個丟失的整數,這個整數
範圍為1~N,且不包含陣列已經有的數字。
Example:
Input: arr = [2,3,4,7,11], k = 5
Output: 9
Explanation: The missing positive integers are [1,5,6,8,9,10,12,13,...]. The
5th missing positive integer is 9.
法一 暴力
思路:
1.遍歷陣列,如果陣列裡面沒有小於k的數,直接返回k
2.如果陣列裡面有小於k的數字,k遞增
3.返回k
Java Code:
---------------------------------------------------
class Solution {
public int findKthPositive(int[] arr, int k) {
for (int n : arr) {
if (n <= k) {
k++;
}
}
return k;
}
}
---------------------------------------------------
法二 二分搜尋
思路:
1.因為陣列嚴格遞增,透過a[i]的值我們其實可以獲得一些資訊,考慮下表:
a[0]=2 缺1
a[1]=3 缺1
a[2]=4 缺1
a[3]=7 缺3 [1,5,6]
我們觀察到陣列第i個位置缺少的元素數量會是 a[i] - i - 1
2.所以我們只要找到一個數字使缺失的元素數量大於等於k,我們就可以得知第k個
丟失的數字了,因為陣列已經排序,所以可以把k當作二分搜尋的pivot
3.同方法一的思路,我們只要得到滿足條件的k,把k加上小於k的數字數量(l)就可以
獲得第k的丟失的數字
Java Code:
-------------------------------------
class Solution {
public int findKthPositive(int[] arr, int k) {
int l = 0, r = arr.length - 1;
while (l <= r) {
int mid = (l + r)/2;
if (arr[mid] - mid - 1 < k) {
l = mid + 1;
} else {
r = mid-1;
}
}
return l + k;
}
}
-------------------------------------
--
https://i.imgur.com/3e5CZfj.jpg

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.100.75.86 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1678114774.A.2EF.html
推
03/06 23:13,
2年前
, 1F
03/06 23:13, 1F
推
03/07 01:32,
2年前
, 2F
03/07 01:32, 2F
討論串 (同標題文章)
完整討論串 (本文為第 261 之 719 篇):