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

19 Jan, 2022
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
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++
Java
Python 3
C#
PHP
Javascript
// C++ code to find the  every segment size of// array have a search key x#include <bits/stdc++.h>using namespace std; bool findxinkwindowSize(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 driverint 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 (findxinkwindowSize(arr, x, k, n))        cout << "Yes" << endl;    else        cout << "No" << endl;    return 0;}
// Java code to find the every// segment size of array have// a search key ximport java.util.*;class GFG {    static boolean findxinkwindowSize(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, 4,  9,  3,                                1, 7, 3, 11, 12, 3 };        int x = 3, k = 3;        int n = arr.length;        if (findxinkwindowSize(n, arr, x, k))            System.out.println("Yes");        else            System.out.println("No");    }} // This code is contributed by Vivek258709
# Python 3 program to find# the every segment size of# array have a search key x def findxinkwindowSize(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 Codeif __name__ == "__main__" :     arr = [ 3, 5, 2, 4, 9, 3,            1, 7, 3, 11, 12, 3 ]    x, k = 3, 3    n = len(arr)         if (findxinkwindowSize(arr, x, k, n)) :        print("Yes")    else :        print("No")         # This code is contributed# by ANKITRAI1
// C# code to find the every// segment size of array have// a search key xusing System; class GFG{static bool findxinkwindowSize(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 Codepublic 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 (findxinkwindowSize(arr, x, k, n))        Console.Write("Yes");    else        Console.Write("No");}} // This code is contributed by ChitraNayal
<?php// PHP code to find the every// segment size of array have// a search key x function findxinkwindowSize(&$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 (findxinkwindowSize($arr, $x, $k, $n))    echo "Yes" ;else    echo "No" ; // This code is contributed// by Shivi_Aggarwal?>
<script> // JavaScript code to find the  every segment size of// array have a search key x function findxinkwindowSize( 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 (findxinkwindowSize(arr, x, k, n))        document.write("Yes");    else        document.write("No");         // This code contributed by aashish1995 </script>
Yes
 
Time Complexity: O(n)
Kirti_Mangal
ankthon
Shivi_Aggarwal
ukasp
vivek258709
aashish1995
adnanirshad158
Arrays
Searching
Arrays
Searching
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Trapping Rain Water
Program to find sum of elements in a given array
Reversal algorithm for array rotation
Window Sliding Technique
Find duplicates in O(n) time and O(1) extra space | Set 1
Binary Search
Median of two sorted arrays of different sizes
Most frequent element in an array
Find the index of an array element in Java
Count number of occurrences (or frequency) in a sorted array