สมมติว่าเรามีรายการตัวเลขที่เรียงแล้วและไม่ซ้ำกัน nums และจำนวนเต็ม k เราต้องการหาตัวเลขที่หายไปลำดับที่ k นับจากตัวแรกของรายการ
ตัวอย่างเช่น nums = [5, 6, 8, 10, 11], k = 1 ผลลัพธ์คือ 9 (ตัวเลขหายไปตัวที่ 2 คือ 9)
ขั้นตอนการแก้ปัญหา (Linear Scan)
- วนลูป
iจาก 1 ถึงlen(nums) - 1:diff = nums[i] - nums[i-1] - 1(จำนวนตัวเลขหายไประหว่างคู่นี้)- หาก
k >= diffให้k -= diff - มิฉะนั้น คืนค่า
nums[i-1] + k + 1
- หากวนจบไม่เจอ คืนค่า
nums[-1] + k + 1
ตัวอย่างโค้ด Python
class Solution:
def solve(self, nums, k):
for i in range(1, len(nums)):
diff = nums[i] - nums[i - 1] - 1
if k >= diff:
k -= diff
else:
return nums[i - 1] + k + 1
return nums[-1] + k + 1
ob = Solution()
nums = [5, 6, 8, 10, 11]
k = 1
print(ob.solve(nums, k)) # Output: 9
อินพุต
[5, 6, 8, 10, 11], 1
เอาต์พุต
9