Check if every pair of 1 in the array is at least K length apart from each other
Last Updated :
27 Sep, 2022
Given a binary array and an integer K, check if every pair of 1 in the array is at least K length apart from each other. Return true if the condition holds, otherwise return false.
Examples:
Input: arr = [1, 0, 0, 0, 1, 0, 0, 1, 0, 0], K = 2.
Output: True
Explanation:
Every 1 in the array is at least K distance apart from each other.
Input: arr= [1, 0, 1, 0, 1, 1], K = 1
Output: False
Explanation:
The fifth 1 and sixth 1 are not apart from each other. Hence, the output is false.
Approach:
To solve the problem mentioned above we have to check the distance between each pair of adjacent 1. Find the first position of 1 then iterate through the rest of the array and increment distance if it’s 0 otherwise perform a check operation if the distance is less than k and reset the count to 0 again.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool kLengthApart(vector< int >& nums, int k)
{
int pos = 0, count = 0;
while (pos < nums.size() && nums[pos] == 0)
pos++;
for ( int i = pos + 1; i < nums.size(); i++) {
if (nums[i] == 0)
count++;
else {
if (count < k)
return false ;
count = 0;
}
}
return true ;
}
int main()
{
vector< int > nums = { 1, 0, 0, 0, 1, 0, 0, 1, 0, 0 };
int k = 2;
bool ans = kLengthApart(nums, k);
if (ans == 1)
cout << "True" << endl;
else
cout << "False" << endl;
return 0;
}
|
Java
class Main{
public static boolean kLengthApart( int [] nums,
int k)
{
int pos = 0 , count = 0 ;
while (pos < nums.length && nums[pos] == 0 )
pos++;
for ( int i = pos + 1 ; i < nums.length; i++)
{
if (nums[i] == 0 )
count++;
else
{
if (count < k)
return false ;
count = 0 ;
}
}
return true ;
}
public static void main(String[] args)
{
int [] nums = { 1 , 0 , 0 , 0 , 1 ,
0 , 0 , 1 , 0 , 0 };
int k = 2 ;
boolean ans = kLengthApart(nums, k);
if (ans)
System.out.println( "True" );
else
System.out.println( "False" );
}
}
|
Python3
def kLengthApart(nums, k):
pos = 0
count = 0
while (pos < len (nums) and nums[pos] = = 0 ):
pos + = 1
for i in range (pos + 1 , len (nums)):
if nums[i] = = 0 :
count + = 1
else :
if count < k:
return False
count = 0
return True
if __name__ = = "__main__" :
nums = [ 1 , 0 , 0 , 0 , 1 , 0 , 0 , 1 , 0 , 0 ]
k = 2
print (kLengthApart(nums, k))
|
C#
using System;
class GFG{
public static bool kLengthApart( int [] nums,
int k)
{
int pos = 0, count = 0;
while (pos < nums.Length && nums[pos] == 0)
pos++;
for ( int i = pos + 1; i < nums.Length; i++)
{
if (nums[i] == 0)
count++;
else
{
if (count < k)
return false ;
count = 0;
}
}
return true ;
}
public static void Main()
{
int [] nums = { 1, 0, 0, 0, 1,
0, 0, 1, 0, 0 };
int k = 2;
bool ans = kLengthApart(nums, k);
if (ans)
Console.Write( "True" );
else
Console.Write( "False" );
}
}
|
Javascript
<script>
function kLengthApart(nums, k)
{
var pos = 0, count = 0;
var i;
while (pos < nums.length && nums[pos] == 0)
pos++;
for (i = pos + 1; i < nums.length; i++) {
if (nums[i] == 0)
count++;
else {
if (count < k)
return false ;
count = 0;
}
}
return true ;
}
var nums = [1, 0, 0, 0, 1, 0, 0, 1, 0, 0];
var k = 2;
var ans = kLengthApart(nums, k);
if (ans == 1)
document.write( "True" );
else
document.write( "False" );
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...