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