Menu
CoddyTech

The Celebrity Problem

يوجد n شخصًا في حفلة، مرقّمين من 0 إلى n-1. تحصل على مصفوفة n × n حيث تكون قيمة matrix[i][j] هي 1 إذا كان الشخص i يعرف الشخص j، و0 إذا لم يكن يعرفه. المعرفة أحادية الاتجاه: فقد يعرف i الشخص j بينما لا يعرف j الشخص i.

المشهور هو شخص يعرفه كل شخص آخر، ولا يعرف أي شخص. أعد رقم المشهور، أو -1 إذا لم يوجد مشهور.

الدالة

findCelebrity(matrix: integer-2d-array) → integer
matrixinteger-2d-array
من يعرف من: تكون القيمة في الصف i، والعمود j هي 1 إذا كان الشخص i يعرف الشخص j
تُرجعinteger
رقم الشخصية المشهورة، أو ‎-1‎ إذا لم تكن موجودة

القيود

  • 2 ≤ n ≤ 150، حيث إن n هو عدد الصفوف والأعمدة
  • matrix[i][j] تكون 0 أو 1
  • matrix[i][i] = 0 لكل شخص

أمثلة

المدخلات
matrix = [[0, 1, 0], [0, 0, 0], [1, 1, 0]]
المخرجات
1
الشرح
الصف 1 كله أصفار، لذا لا يعرف الشخص 1 أحدًا. يحتوي العمود 1 على الرقم 1 في الصفين 0 و2، لذا يعرف كلا الشخصين الآخرين الشخص 1. الشخص 1 هو المشهور.
challenge icon

سؤال إضافي

افترض أن كل عملية بحث هي سؤال عليك طرحه. ما أقل عدد من الأسئلة التي تحتاج إليها في أسوأ الحالات، وهل يمكنك النزول إلى أقل من 3(n-1)؟

إعادة ضبط الشيفرة
def findCelebrity(matrix):
    # اكتب الكود هنا

اختبار #1

اختبار #2

اختبار #3

وسيط

matrix = [[0, 1, 0], [0, 0, 0], [1, 1, 0]]

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

1