คำอธิบายปัญหา
เราทุกคนรัก Twix (เพราะมันเป็นขนมที่ดีที่สุด) แต่นี่เป็นฮาโลวีนแรกของเด็ก ๆ - เราต้องคว้าลูกอมอย่างน้อยหนึ่งชนิดสำหรับพวกเขา ทุกฮัลโลวีนทุกคนที่อาศัยอยู่ในอเวนิวของ Numberline จะส่งอีเมลแจ้งว่าพวกเขาจะมอบขนมประเภทใดในปีนี้
Oh! และเราอาศัยอยู่ในโลก 1D
ด้วยความขี้เกียจเป็นพิเศษในบางวิธีและไม่ได้อยู่ในรูปแบบอื่นเราได้ทำแผนที่บ้านให้ตำแหน่งของพวกเขาไปตามถนน นอกจากนี้เรายังระบุประเภทของขนมที่พวกเขามี นี่คือแผนที่ที่เราทำในปีนี้:
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
สำหรับขาเล็ก ๆ ของเด็กเราต้องหาทางเดินที่สั้นที่สุดเริ่มต้นที่บ้านในละแวกนั้นเพื่อรวบรวมขนมอย่างน้อยหนึ่งชนิด
ตัวอย่าง
ตามคำร้องขอของผู้ใช้สองคน (รวมถึง Shaggy) ฉันจะโยนในตัวอย่างการทำงาน หวังว่านี่จะช่วยล้างสิ่งต่างๆ ใส่ :) :
[(-2, {"Kisses", "KitKats"}),
(1, {"KitKats", "Peanut Butter Cups"}),
(6, {"Kisses", "Twix"}),
(9, {"Skittles"}),
(10, {"Twix"})]
เอาท์พุท:
[1, 2, 3]
แผนที่และทางออกอื่น ...
การป้อนข้อมูล:
[(-3, {"KitKats", "Twix"}),
(-1, {"Hundred Grands"}),
(3, {"Kisses"}),
(12, {"Hundred Grands", "Twix", "KitKats"})]
ผลผลิต :
[0, 1, 2]
เราสามารถเริ่มต้นที่ศูนย์ประสานงาน 9 แห่งเพื่อรวบรวมลูกอมไปที่บ้าน 6 และ 1 นั่นเติมโควต้าขนมโดยการเดิน 8 หน่วย แต่มันเป็นทางออกที่สั้นที่สุดหรือไม่?
กฎระเบียบ
คอมเมนต์จะต้องใช้เวลาในการโต้แย้งเดียวที่มีโครงสร้างคล้ายกับตัวอย่างและส่งออกดัชนีของบ้านเพื่อเข้าชมในการแก้ปัญหาที่สั้นที่สุด
ใช้กฎของรหัสกอล์ฟทั่วไป: วิธีแก้ไขที่สั้นที่สุดในหน่วยไบต์ชนะ!
ป.ล. นี่เป็นคำถามสัมภาษณ์ที่ฉันได้รับจาก บริษัท ด้านเทคโนโลยีรายใหญ่ที่สุดแห่งหนึ่งของโลก หากคุณไม่ชอบกอล์ฟลองค้นหาวิธีแก้ปัญหาเวลา O (k * n) โดยที่ k คือจำนวนของประเภทขนมหวานและ n คือจำนวนบ้าน
แก้ไข
ดังที่ Jonathon Allan ชี้ให้เห็นความสับสนบางอย่างเกิดขึ้นกับสิ่งที่ "ดัชนี" หมายถึงในกรณีนี้ เราต้องการที่จะส่งออกตำแหน่งบ้านในรายการอาร์กิวเมนต์และไม่ใช่พิกัดของพวกเขาในช่องทาง