Cho mảng nums điểm hiện tại của n vận động viên. Vòng chung kết: hạng 1 cộng n điểm, hạng 2 cộng n-1,... Hạng cuối cộng 1 điểm. Đếm số vận động viên vẫn có cơ hội vô địch (tính cả hòa đầu).
Ví dụ: nums=[9,6,11,12] → 3 (9, 11, 12 có thể vô địch).
Giải thuật
- Sắp xếp
nums - Tính
a = max(nums[i] + n - i)choitừn-1đến 0 (điểm tối đa có thể đạt được của ai đó) - Đếm số
xtrongnumsthỏax + n >= a(vẫn có thể đạt hoặc vượta)
Ví dụ triển khai
def solve(nums):
if not nums:
return 0
n = len(nums)
ans = 0
nums.sort()
a = 0
for i in range(n-1, -1, -1):
cand = nums[i] + n - i
if cand > a:
a = cand
for x in nums:
if x + n >= a:
ans += 1
return ans
print(solve([9, 6, 11, 12]))
Đầu vào
[9, 6, 11, 12]
Đầu ra
3