Cho kích thước N, tổng SUM, giới hạn trên K (không phần tử nào > K). Tìm mảng các phần tử riêng biệt thỏa mãn. Trả về -1 nếu không có lời giải.
Ví dụ: N=4, SUM=16, K=9 → [1,2,4,9].
Thuật toán
minimum_sum = N*(N+1)/2maximum_sum = N*K - N*(N-1)/2- Nếu
SUMngoài khoảng → -1 - Khởi tạo
res = [0,1,2,...,N],sum = minimum_sum - Từ
i=Nxuống 1: cố gắng tăngres[i]lênKcho đến khi đạtSUM
Ví dụ mã Python
def get_arr(N, SUM, K):
minimum_sum = (N * (N + 1)) / 2
maximum_sum = (N * K) - (N * (N - 1)) / 2
if minimum_sum > SUM or maximum_sum < SUM:
return -1
res = [i for i in range(N + 1)]
sum = minimum_sum
i = N
while i >= 1:
x = sum + (K - i)
if x < SUM:
sum = sum + (K - i)
res[i] = K
K -= 1
else:
res[i] += (SUM - sum)
sum = SUM
break
i -= 1
return res
N = 4
SUM = 16
K = 9
print(get_arr(N, SUM, K))
Đầu vào
4, 16, 9
Đầu ra
[0, 1, 2, 4.0, 9]