สมมติว่าเรามีตัวแปรขนาดหนึ่ง N เราก็มี SUM ตัวแปรหนึ่งตัว นี่คือผลรวมขององค์ประกอบทั้งหมดที่มีอยู่ในอาร์เรย์ และตัวแปรอื่น K ที่ไม่มีองค์ประกอบในอาร์เรย์คือ มากกว่า K เราต้องหาอาร์เรย์มุมฉากหนึ่งอาร์เรย์ที่องค์ประกอบทั้งหมดในอาร์เรย์มีความแตกต่างกัน หากไม่มีวิธีแก้ปัญหา ให้คืนค่า -1
ดังนั้น หากอินพุตเป็น N =4, SUM =16 K =9 เอาต์พุตจะเป็น [1,2,4,9]
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
maximum_sum :=(N *(N + 1)) / 2
-
maximum_sum :=(N * K) -(N *(N - 1)) / 2
-
ถ้า maximum_sum> SUM หรือ maximum_sum
-
กลับ -1
-
-
res :=หนึ่งอาร์เรย์ขนาด N + 1 และเติม 0 ถึง N
-
ผลรวม :=ขั้นต่ำ_sum
-
ฉัน :=ไม่
-
ในขณะที่ i>=1 ทำ
-
x :=ผลรวม + (K - i)
-
ถ้า x
-
sum :=sum +(K - i)
-
res[i] :=K
-
K :=K - 1
-
-
มิฉะนั้น
-
res[i] :=res[i] +(SUM - ผลรวม)
-
ผลรวม :=SUM
-
ออกจากวง
-
-
ผม :=ผม - 1
-
-
ผลตอบแทน
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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))
อินพุต
4, 16, 9
ผลลัพธ์
[0, 1, 2, 4.0, 9]