Skip to content
Related Articles

Related Articles

Improve Article

Check if a key is present in every segment of size k in an array

  • Difficulty Level : Easy
  • Last Updated : 15 Mar, 2021

Given an array arr[] and size of array is n and one another key x, and give you a segment size k. The task is to find that the key x present in every segment of size k in arr[].
Examples: 

Input : 
arr[] = { 3, 5, 2, 4, 9, 3, 1, 7, 3, 11, 12, 3} 
x = 3 
k = 3 
Output : Yes 
There are 4 non-overlapping segments of size k in the array, {3, 5, 2}, {4, 9, 3}, {1, 7, 3} and {11, 12, 3}. 3 is present all segments.
Input : 
arr[] = { 21, 23, 56, 65, 34, 54, 76, 32, 23, 45, 21, 23, 25} 
x = 23 
k = 5 
Output :Yes 
There are three segments and last segment is not full {21, 23, 56, 65, 34}, {54, 76, 32, 23, 45} and {21, 23, 25}. 
23 is present all window.
Input :arr[] = { 5, 8, 7, 12, 14, 3, 9} 
x = 8 
k = 2 
Output : No

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

The idea is simple, we consider every segment of size k and check if x is present in the window or not. We need to carefully handle the last segment.
Below is the implementation of the above approach: 

C++




// C++ code to find the  every segment size of
// array have a search key x
#include <bits/stdc++.h>
using namespace std;
 
bool findxinkindowSize(int arr[], int x, int k, int n)
{
    int i;
    for (i = 0; i < n; i = i + k) {
 
        // Search x in segment starting
        // from index i.
        int j;
        for (j = 0; j < k; j++)
            if (arr[i + j] == x)
                break;
 
        // If loop didn't break
        if (j == k)
           return false;
    }
 
    // If n is a multiple of k
    if (i == n)
       return true;
 
    // Check in last segment if n
    // is not multiple of k.
    int j;
    for (j=i-k; j<n; j++)
      if (arr[j] == x)
          break;
    if (j == n)
       return false
      
    return true;
}
 
// main driver
int main()
{
    int arr[] = { 3, 5, 2, 4, 9, 3, 1, 7, 3, 11, 12, 3 };
    int x = 3, k = 3;
    int n = sizeof(arr) / sizeof(arr[0]);
    if (findxinkindowSize(arr, x, k, n))
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
    return 0;
}

Java




// Java code to find the every
// segment size of array have
// a search key x
import java.util.*;
class GFG {
    static boolean findxinkindowSize(int N, int[] arr,
                                     int x, int k)
    {
        int i;
        boolean b = false;
       
        // Iterate from 0 to N - 1
        for (i = 0; i < N; i = i + k) {
           
            // Iterate from 0 to k - 1
            for (int j = 0; j < k; j++) {
                if (i + j < N && arr[i + j] == x)
                    break;
 
                if (j == k)
                    return false;
                if (i + j >= N)
                    return false;
            }
        }
        if (i >= N)
            return true;
        else
            return b;
    }
 
    // Driver Code
    public static void main(String args[])
    {
        int arr[] = new int[] { 3, 5, 2, 493,
                                1, 7, 3, 11, 12, 3 };
        int x = 3, k = 3;
        int n = arr.length;
        if (findxinkindowSize(n, arr, x, k))
            System.out.println("Yes");
        else
            System.out.println("No");
    }
}
 
// This code is contributed by Vivek258709

Python 3




# Python 3 program to find
# the every segment size of
# array have a search key x
 
def findxinkindowSize(arr, x, k, n) :
 
    i = 0
    while i < n :
 
        j = 0
         
        # Search x in segment
        # starting from index i
        while j < k :
             
            if arr[i + j] == x :
                break
             
            j += 1
 
        # If loop didn't break
        if j == k :
            return False
 
        i += k
         
    # If n is a multiple of k    
    if i == n :
        return True
 
    j = i - k
     
    # Check in last segment if n
    # is not multiple of k.
    while j < n :
        if arr[j] == x :
            break
 
        j += 1
 
    if j == n :
        return False
 
    return True
 
# Driver Code
if __name__ == "__main__" :
 
    arr = [ 3, 5, 2, 4, 9, 3,
            1, 7, 3, 11, 12, 3 ]
    x, k = 3, 3
    n = len(arr)
     
    if (findxinkindowSize(arr, x, k, n)) :
        print("Yes")
    else :
        print("No")
         
# This code is contributed
# by ANKITRAI1

C#




// C# code to find the every
// segment size of array have
// a search key x
using System;
 
class GFG
{
static bool findxinkindowSize(int[] arr, int x,
                              int k, int n)
{
    int i;
    for (i = 0; i < n; i = i + k)
    {
 
        // Search x in segment
        // starting from index i.
        int j;
        for (j = 0; j < k; j++)
            if (arr[i + j] == x)
                break;
 
        // If loop didn't break
        if (j == k)
        return false;
    }
 
    // If n is a multiple of k
    if (i == n)
    return true;
 
    // Check in last segment if
    // n is not multiple of k.
    int l;
    for (l = i - k; l < n; l++)
    if (arr[l] == x)
        break;
    if (l == n)
    return false;
     
    return true;
}
 
// Driver Code
public static void Main()
{
    int[] arr = new int[] {3, 5, 2, 4, 9, 3,
                         1, 7, 3, 11, 12, 3};
    int x = 3, k = 3;
    int n = arr.Length;
    if (findxinkindowSize(arr, x, k, n))
        Console.Write("Yes");
    else
        Console.Write("No");
}
}
 
// This code is contributed by ChitraNayal

PHP




<?php
// PHP code to find the every
// segment size of array have
// a search key x
 
function findxinkindowSize(&$arr, $x,
                            $k, $n)
{
    for ($i = 0;
         $i < $n; $i = $i + $k)
    {
 
        // Search x in segment
        // starting from index i.
        for ($j = 0; $j < $k; $j++)
            if ($arr[$i + $j] == $x)
                break;
 
        // If loop didn't break
        if ($j == $k)
        return false;
    }
 
    // If n is a multiple of k
    if ($i == $n)
    return true;
 
    // Check in last segment if n
    // is not multiple of k.
    for ($j = $i - $k; $j < $n; $j++)
    if ($arr[$j] == $x)
        break;
    if ($j == $n)
    return false;
     
    return true;
}
 
// Driver Code
$arr = array(3, 5, 2, 4, 9, 3, 1,
             7, 3, 11, 12, 3);
$x = 3;
$k = 3;
$n = sizeof($arr);
if (findxinkindowSize($arr, $x, $k, $n))
    echo "Yes" ;
else
    echo "No" ;
 
// This code is contributed
// by Shivi_Aggarwal
?>

Javascript




<script>
 
// JavaScript code to find the  every segment size of
// array have a search key x
 
function findxinkindowSize( arr,  x,  k,  n)
{
    let i;
    for (i = 0; i < n; i = i + k) {
 
        // Search x in segment starting
        // from index i.
        let j;
        for (j = 0; j < k; j++)
            if (arr[i + j] == x)
                break;
 
        // If loop didn't break
        if (j == k)
           return false;
    }
 
    // If n is a multiple of k
    if (i == n)
       return true;
 
    // Check in last segment if n
    // is not multiple of k.
    let j;
    for (j=i-k; j<n; j++)
      if (arr[j] == x)
          break;
    if (j == n)
       return false
      
    return true;
}
 
// main driver
  let arr = [ 3, 5, 2, 4, 9, 3, 1, 7, 3, 11, 12, 3 ];
    let x = 3, k = 3;
    let n = arr.length;
    if (findxinkindowSize(arr, x, k, n))
        document.write("Yes");
    else
        document.write("No");
         
// This code contributed by aashish1995
 
</script>
Output: 
Yes

 

Time Complexity: O(n)




My Personal Notes arrow_drop_up
Recommended Articles
Page :