Seating Arrangement without adjacent persons
Last Updated :
29 Oct, 2023
Given an integer n, denoting the number of people who needs to be seated, and a list of m integer seats, where 0 represents a vacant seat and 1 represents an already occupied seat, the task is to find whether all n people can find a seat, provided that no two people can sit next to each other.
Examples:
Input: n = 2, m = 7, seats[] = {0, 0, 1, 0, 0, 0, 1}
Output: Yes
Explanation: The two people can sit at index 0 and 4.
Input:n = 1, m = 3, seats[] = {0, 1, 0}
Output: No
Explanation: There is no way to get a seat for one person.
Approach: This can be solved with the following idea:
The approach checks whether it is possible to find n consecutive seats in a row of m seats, where the seat array represents the row. It iterates through the seats array and checks if a seat is available, i.e., if the seat is not already occupied and there are no occupied seats adjacent to it. If a seat is available, it increments the available_seats counter and skips the next seat to avoid counting consecutive seats twice. Finally, it returns whether the number of available seats is greater than or equal to n.
Steps involved in the implementation of code:
- Start with initializing available_seats to 0.
- For each seat in the array seats, do the following:
- Initialize prev as 0 if i is 0, else prev as the value of seats[i-1].
- Initialize next as 0 if i is m-1, else next as the value of seats[i+1].
- Check if the sum of the prev, next, and current seats (seats[i]) is equal to 0. If yes, then increment available_seats and increment i by 1 to skip the next seat since no one can sit there.
- If available_seats is greater than or equal to n, return true, else return false.
Below is the code implementation of the above code:
C++
#include <iostream>
using namespace std;
class Solution {
public :
static bool is_possible_to_get_seats( int n, int m, int * seats) {
int available_seats = 0;
for ( int i = 0; i < m; i++) {
int prev = (i == 0) ? 0 : seats[i - 1];
int next = (i == m - 1) ? 0 : seats[i + 1];
if (prev + next + seats[i] == 0) {
available_seats++;
if (available_seats == n) {
return true ;
}
i++;
}
}
return false ;
}
};
int main() {
int n = 2;
int m = 7;
int seats[] = { 0, 0, 1, 0, 0, 0, 1 };
if (Solution::is_possible_to_get_seats(n, m, seats)) {
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
return 0;
}
|
Java
public class GFG {
static class Solution {
public static boolean
is_possible_to_get_seats( int n, int m, int [] seats)
{
int available_seats = 0 ;
for ( int i = 0 ; i < m; i++) {
int prev;
if (i == 0 )
prev = 0 ;
else
prev = seats[i - 1 ];
int next;
if (i == m - 1 )
next = 0 ;
else
next = seats[i + 1 ];
if (prev + next + seats[i] == 0 ) {
available_seats++;
if (available_seats == n) {
return true ;
}
i++;
}
}
return false ;
}
}
public static void main(String[] args)
{
int n = 2 ;
int m = 7 ;
int [] seats = new int [] { 0 , 0 , 1 , 0 , 0 , 0 , 1 };
if (Solution.is_possible_to_get_seats(n, m,
seats)) {
System.out.println( "Yes" );
}
else {
System.out.println( "No" );
}
}
}
|
Python3
class Solution:
@staticmethod
def is_possible_to_get_seats(n, m, seats):
available_seats = 0
for i in range (m):
prev = seats[i - 1 ] if i ! = 0 else 0
next = seats[i + 1 ] if i ! = m - 1 else 0
if prev + next + seats[i] = = 0 :
available_seats + = 1
if available_seats = = n:
return True
i + = 1
return False
n = 2
m = 7
seats = [ 0 , 0 , 1 , 0 , 0 , 0 , 1 ]
if Solution.is_possible_to_get_seats(n, m, seats):
print ( "Yes" )
else :
print ( "No" )
|
C#
using System;
class Solution
{
public static bool IsPossibleToGetSeats( int n, int m, int [] seats)
{
int availableSeats = 0;
for ( int i = 0; i < m; i++)
{
int prev = (i == 0) ? 0 : seats[i - 1];
int next = (i == m - 1) ? 0 : seats[i + 1];
if (prev + next + seats[i] == 0)
{
availableSeats++;
if (availableSeats == n)
{
return true ;
}
i++;
}
}
return false ;
}
}
class Program
{
static void Main()
{
int n = 2;
int m = 7;
int [] seats = { 0, 0, 1, 0, 0, 0, 1 };
if (Solution.IsPossibleToGetSeats(n, m, seats))
{
Console.WriteLine( "Yes" );
}
else
{
Console.WriteLine( "No" );
}
}
}
|
Javascript
<script>
class Solution {
static isPossibleToGetSeats(n, m, seats) {
let availableSeats = 0;
for (let i = 0; i < m; i++) {
let prev = (i === 0) ? 0 : seats[i - 1];
let next = (i === m - 1) ? 0 : seats[i + 1];
if (prev + next + seats[i] === 0) {
availableSeats++;
if (availableSeats === n) {
return true ;
}
i++;
}
}
return false ;
}
}
const n = 2;
const m = 7;
const seats = [0, 0, 1, 0, 0, 0, 1];
if (Solution.isPossibleToGetSeats(n, m, seats)) {
console.log( "Yes" );
} else {
console.log( "No" );
}
</script>
|
Time Complexity: O(m)
Auxilairy Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...