The Celebrity Problem
Problem Statement - link #
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 #
2 <= N <= 30000 <= M[][] <= 1
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;
}
};