รายการที่เชื่อมโยงเป็นทวีคูณเป็นโครงสร้างข้อมูลที่แต่ละโหนดมีvalue
"ลิงก์" รวมถึงทั้งสองprevious
และถัดไปnodes
ในรายการ ตัวอย่างเช่นพิจารณาโหนดต่อไปนี้ที่มีค่า 12, 99 และ 37:
นี่โหนดที่มีค่า12และ99ชี้ไปที่ของตนnext
โหนดที่มีค่า99และ37 โหนดที่มีค่า37ไม่มีnext
ตัวชี้เนื่องจากเป็นโหนดสุดท้ายในรายการ ในทำนองเดียวกันโหนดที่มีค่า99และ37ชี้ไปที่previous
โหนดที่เกี่ยวข้อง12และ99แต่12ไม่มีprevious
ตัวชี้เนื่องจากเป็นโหนดแรกในรายการ
การตั้งค่า
ในทางปฏิบัติ "ลิงก์" ของโหนดนั้นถูกนำไปใช้เป็นตัวชี้ไปยังตำแหน่งของโหนดก่อนหน้าและถัดไปในหน่วยความจำ สำหรับวัตถุประสงค์ของเรา "หน่วยความจำ" จะเป็นอาเรย์ของโหนดและตำแหน่งของโหนดจะเป็นดัชนีในอาเรย์ โหนดสามารถจะคิดว่าเป็น 3 ( prev value next )
อันดับของแบบฟอร์ม ตัวอย่างด้านบนอาจมีลักษณะเช่นนี้:
แต่มันอาจเป็นแบบนี้แทน:
เริ่มต้นที่โหนดใด ๆ คุณสามารถติดตามprevious
ลิงก์ (แสดงเป็นจุดกำเนิดของลูกศรสีแดง) เพื่อไปยังโหนดที่อยู่ก่อนหน้าและnext
ลิงก์ (ลูกศรสีเขียว) เพื่อค้นหาโหนดลำดับถัดไปเพื่อรับค่าโหนดทั้งหมดตามลำดับ: [12, 99, 37]
.
แผนภาพแรกด้านบนสามารถแสดงเป็นอาร์เรย์[[null, 12, 1], [0, 99, 2], [1, 37, null]]
ได้ [[2, 99, 1], [0, 37, null], [null, 12, 0]]
ที่สองนั้นจะเป็น
ความท้าทาย
เขียนโปรแกรมที่ใช้เป็นอาร์เรย์ของโหนดและดัชนีของโหนดและส่งคืนตามลำดับรายการค่าของโหนดในรายการที่เชื่อมโยงเป็นสองเท่าเดียวกัน
ภาวะแทรกซ้อน
"หน่วยความจำ" จะไม่ประกอบด้วยโหนดของรายการเดียวเท่านั้น มันอาจมีหลายรายการ:
อาร์เรย์ด้านบนมีรายการที่เชื่อมโยงสองสามรายการรหัสสีเพื่อความสะดวกของคุณ:
โหนดที่ดัชนี
7
,10
,1
,4
,3
,12
(แสดงเฉพาะnext
การเชื่อมโยงไปลดความยุ่งเหยิง; คลิกเพื่อดูภาพขยาย):ได้รับอาร์เรย์นี้และใด ๆ
[0, 1, 1, 2, 3, 5, 8]
ของดัชนีเหล่านี้โปรแกรมของคุณควรจะกลับในการสั่งซื้อค่าโหนดที่ดัชนี
9
:ได้รับดัชนีโปรแกรมของคุณควรจะกลับ
9
[99]
โหนดที่ดัชนี
11
,8
,0
,6
,2
:[2, 3, 5, 7, 11]
รับหนึ่งของดัชนีเหล่านี้ก็ควรจะกลับ
กฎระเบียบ
อินพุต
โปรแกรมของคุณจะได้รับเป็นอินพุต:
รายการของโหนด ((3-tuples ตามที่อธิบายไว้ข้างต้น) โดยที่ 1 ≤𝒏≤ 1,000 ในรูปแบบที่สะดวกใด ๆ เช่นอาร์เรย์ของอาร์เรย์อาร์เรย์ "แบน" ของจำนวนเต็มที่มีความยาว3𝒏เป็นต้น
องค์ประกอบของ 3-tuples อาจอยู่ในลำดับใดก็ได้:
( prev value next )
,,( next prev value )
ฯลฯ สำหรับแต่ละโหนดprev
และnext
จะเป็นnull
(หรือค่าที่สะดวกอื่น ๆ เช่น-1
) เพื่อระบุโหนดแรกหรือโหนดสุดท้ายในรายการที่เชื่อมโยงเป็นสองเท่าหรือดัชนีที่ถูกต้องของ รายการทั้ง 0- หรือ 1 ตามที่สะดวกvalue
จะเป็นจำนวนเต็มแบบ 32 บิตที่ลงนามหรือประเภทจำนวนเต็มมากที่สุดที่ภาษาของคุณรองรับแล้วแต่จำนวนใดจะน้อยกว่าดัชนี𝒑ของโหนดในรายการ (1) โหนดที่ระบุอาจเป็นโหนดแรกในรายการที่ลิงก์เป็นสองเท่าโหนดสุดท้ายโหนดกลางหรือแม้แต่โหนดเดียว
รายการอินพุต (1) อาจมีข้อมูลทางพยาธิวิทยา (เช่นวงรอบโหนดที่ชี้ไปยังโหนดอื่น ๆ ) แต่ดัชนีอินพุต (2) จะชี้ไปที่โหนดที่สามารถส่งเอาต์พุตเดี่ยวที่มีรูปแบบถูกต้อง สรุปได้ว่า
เอาท์พุต
โปรแกรมของคุณควรส่งออกค่าของโหนดของรายการที่เชื่อมโยงเป็นทวีคูณซึ่งโหนดที่ดัชนี𝒑เป็นสมาชิกตามลำดับรายการ เอาต์พุตสามารถอยู่ในรูปแบบที่สะดวก แต่ข้อมูลจะต้องรวมเฉพาะโหนดvalue
s
การชนะ
นี่คือรหัสกอล์ฟรหัสกอล์ฟคำตอบที่สั้นที่สุดในการชนะไบต์ ช่องโหว่มาตรฐานใช้
กรณีทดสอบ
ด้านล่างแต่ละกรณีทดสอบเป็นของแบบฟอร์ม:
X)
prev value next, prev value next, ...
index
value value value ...
... โดยที่X
จดหมายจะระบุกรณีทดสอบบรรทัดที่สองคือรายการอินพุตบรรทัดที่สามคือดัชนีอินพุต 0-based และบรรทัดที่สี่คือเอาต์พุต
A) null 12 1, 0 99 2, 1 37 null
1
12 99 37
B) 2 99 1, 0 37 null, null 12 0
1
12 99 37
C) 8 5 6, 10 1 4, 6 11 null, 4 3 12, 1 2 3, 12 8 null, 0 7 2, null 0 10, 11 3 0, null 99 null, 7 1 1, null 2 8, 3 5 5
4
0 1 1 2 3 5 8
D) 8 5 6, 10 1 4, 6 11 null, 4 3 12, 1 2 3, 12 8 null, 0 7 2, null 0 10, 11 3 0, null 99 null, 7 1 1, null 2 8, 3 5 5
0
2 3 5 7 11
E) 8 5 6, 10 1 4, 6 11 null, 4 3 12, 1 2 3, 12 8 null, 0 7 2, null 0 10, 11 3 0, null 99 null, 7 1 1, null 2 8, 3 5 5
9
99
F) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
18
80 80 67 71
G) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
8
1 -1 1 -1 1 -1 1
H) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
4
1 3 6 10 15 21
I) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
14
3 1 4 1 5 9 2 6 5 3
J) 13 80 18, 18 71 null, 5 10 19, 12 1 8, 19 21 null, 31 6 2, 17 5 26, 26 0 30, 3 -1 25, null 1 23, 27 6 17, 14 1 24, 28 -1 3, null 80 0, 20 4 11, 33 6 29, 24 9 33, 10 7 6, 0 67 1, 2 15 4, 32 1 14, null 1 31, 29 3 null, 9 -1 28, 11 5 16, 8 1 null, 6 3 7, null 8 10, 23 1 12, 15 5 22, 7 9 null, 21 3 5, null 3 20, 16 2 15
17
8 6 7 5 3 0 9
K) 4 11 0, null 22 3, null 33 3, 1 44 4, 3 55 null, 7 66 7, 6 77 6
3
22 44 55
L) null -123 null
0
-123