The Celebrity Problem

Tags : geeksforgeeks, cpp, medium

A celebrity is a person who is known to all but does not know anyone at a party. If you go to a party of N people, find if there is a celebrity in the party or not. A square NxN matrix M[][] is used to represent people at the party such that if an element of row i and column j is set to 1 it means ith person knows jth person. Here M[i][i] will always be 0. Note: Follow 0 based indexing.

Your Task: You don’t need to read input or print anything. Complete the function celebrity() which takes the matrix M and its size N as input parameters and returns the index of the celebrity. If no such celebrity is present, return -1.

Expected Time Complexity: O(N) Expected Auxiliary Space: O(1)

Examples #

Example 1:

Input:
N = 3
M[][] = [[0 1 0],
         [0 0 0], 
         [0 1 0]]
Output: 1
Explanation: 0th and 2nd person both
know 1. Therefore, 1 is the celebrity.

Example 2:

Input:
N = 2
M[][] = [[0 1],
         [1 0]]
Output: -1
Explanation: The two people at the party both
know each other. None of them is a celebrity.

Constraints #

Solutions #

class Solution{
    public:
    //Function to find if there is a celebrity in the party or not.
    int celebrity(vector<vector<int> >& M, int n) 
    {
        // code here 
        int a = 0, b = n-1;
        while(a < b){
            if(M[b][a]) b--;
            else a++;
        }
        for(int i=0; i<n; i++)
            if(i!=a) 
                if(M[i][a]==0 || M[a][i]) return -1;
        return a; 
    }
};