Cho danh sách nums chỉ chứa số không âm. Tìm k sao cho có đúng k phần tử ≥ k. Nếu không tồn tại, trả về -1.
Ví dụ: nums = [6, 4, 0, 8, 2, 9] → kết quả 4. Có 4 phần tử ≥ 4: [6, 4, 8, 9].
Thuật toán giải quyết (O(n log n))
- Sắp xếp
numsgiảm dần - Duyệt
itừ 1 đếnlen(nums)-1:- Nếu
i > nums[i-1]: dừng (không thể có k = i) - Nếu
i > nums[i]: trả vềi(tìm thấy k)
- Nếu
- Trả về -1 nếu không tìm thấy
Lý do: sau khi sắp xếp giảm, nums[i-1] là phần tử thứ i lớn nhất. Nếu i > nums[i] nghĩa là có đúng i phần tử ≥ i.
Ví dụ minh họa
def solve(nums):
nums.sort(reverse=True)
for i in range(1, len(nums)):
if i > nums[i-1]:
break
elif i > nums[i]:
return i
return -1
nums = [6, 4, 0, 8, 2, 9]
print(solve(nums))
Đầu vào
[6, 4, 0, 8, 2, 9]
Đầu ra
4