Menu
CoddyTech

Sort List

لديك قائمة مترابطة أحادية مخزنة في مصفوفتين لهما الطول نفسه. تحتوي العقدة i على القيمة values[i] وترتبط بالعقدة next[i]، وتنهي -1 القائمة، ورأس القائمة هو العقدة 0. العقد غير مخزنة بترتيب القائمة، وقد تحتوي المصفوفتان أيضًا على عقد متبقية لا تصل إليها أبدًا عند التتبع بدءًا من العقدة 0. هذه العقد ليست جزءًا من القائمة، حتى عندما تشير روابطها إليها.

رتّب القائمة ترتيبًا غير تنازلي حسب القيمة، وأعِد قيم عقدها بهذا الترتيب.

الدالة

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
فهرس العقدة التي ترتبط بها كل عقدة، أو ‎-1‎ للعقدة الأخيرة
valuesinteger-array
القيمة التي تحتفظ بها كل عقدة
تُرجعinteger-array
قيم عُقد القائمة، بدءًا من الأصغر

القيود

  • 1 ≤ n ≤ 4000، حيث إن n هو طول كلٍّ من next وvalues.
  • -1000 ≤ values[i] ≤ 1000
  • كل قيمة من next[i] هي -1 أو فهرس عقدة من 0 إلى n-1.
  • بدءًا من العقدة 0، تصل القائمة إلى -1 دون زيارة أي عقدة مرتين.
  • العُقد التي لا تصل إليها عملية المرور ابتداءً من العقدة 0 ليست جزءًا من القائمة. قد تشير خانات next فيها إلى أي مكان.

أمثلة

المدخلات
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
المخرجات
[1, 2, 3, 4, 5]
الشرح
تزور المسيرة من العقدة 0 العقد 0, 3, 2, 4, 1، لذا تكون القائمة 4, 2, 3, 5, 1. وبعد الترتيب، تصبح 1, 2, 3, 4, 5.
challenge icon

سؤال إضافي

هل يمكنك إجراء الترتيب بإعادة ربط العقد في زمن O(n log n)، من دون نسخ القيم إلى الخارج؟

إعادة ضبط الشيفرة
def sortList(next, values):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

الوسائط

next = [3, -1, 4, 2, 1]
values = [4, 1, 3, 2, 5]

الإخراج المتوقع

[1, 2, 3, 4, 5]