Saturday, November 16, 2024
Google search engine
HomeData Modelling & AICount of K-countdowns in an Array

Count of K-countdowns in an Array

Given an array arr[] of length N and a number K, the task is to count the number of K-countdowns in the array. 
 

A contiguous subarray is said to be a K-countdown if it is of length K and contains the integers K, K-1, K-2, …, 2, 1 in that order. For example, [4, 3, 2, 1] is 4-countdown and [6, 5, 4, 3, 2, 1] is a 6-countdown.

Examples: 
 

Input: K = 2, arr[] = {3 2 1 2 2 1} 
Output:
Explanation: Here, K=2 so the array has 2 2-Countdowns(2, 1). One countdown is from index 1 to 2 and the other is from index 4 to 5.
Input: K = 3, arr[] = {4 3 2 1 5 3 2 1} 
Output:
Explanation: Here, K=3 so the array has 2 3-Countdowns(3, 2, 1) 
 

 

Approach: The given array is traversed and every time the number K is encountered, it is checked if all the numbers K, K-1, K-2, … up to 1 are sequentially present in the array or not. If yes, the count is increased by 1. If the next number takes it out of sequence, then the next occurrence of K is looked for.
Below is the implementation of the above approach: 
 

C++




// C++ code for the above program.
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to to count the
// number of K-countdowns for
// multiple queries
int countKCountdown(int arr[],
                    int N,
                    int K)
{
 
    // flag which stores the
    // current value of value
    // in the countdown
    int flag = -1;
 
    // count of K-countdowns
    int count = 0;
 
    // Loop to iterate over the
    // elements of the array
    for (int i = 0; i < N; i++) {
 
        // condition check if
        // the elements
        // of the array is
        // equal to K
        if (arr[i] == K)
            flag = K;
 
        // condition check if
        // the elements
        // of the array is in
        // continuous order
        if (arr[i] == flag)
            flag--;
 
        // condition check if
        // the elements
        // of the array are not
        // in continuous order
        else
            flag = -1;
 
        // condition check to
        // increment the counter
        // if the there is a
        // K-countdown present
        // in the array
        if (flag == 0)
            count++;
    }
 
    // returning the count of
    // K-countdowns
    return count;
}
 
// Driver Code
int main()
{
    int N = 8;
    int K = 3;
    int arr[N] = { 4, 3, 2, 1,
                   5, 3, 2, 1 };
 
    // Function Call
    cout << countKCountdown(arr, N, K);
}


Java




// Java code for the above program.
class GFG{
     
// Function to to count the
// number of K-countdowns for
// multiple queries
public static int countKCountdown(int arr[],
                                  int N, int K)
{
     
    // Flag which stores the
    // current value of value
    // in the countdown
    int flag = -1;
     
    // Count of K-countdowns
    int count = 0;
     
    // Loop to iterate over the
    // elements of the array
    for(int i = 0; i < N; i++)
    {
        
       // Condition check if the
       // elements of the array is
       // equal to K
       if (arr[i] == K)
           flag = K;
            
       // Condition check if the
       // elements of the array is
       // in continuous order
       if (arr[i] == flag)
           flag--;
        
       // Condition check if the
       // elements of the array are
       // not in continuous order
       else
           flag = -1;
        
       // Condition check to increment
       // the counter if the there is a
       // K-countdown present in the array
       if (flag == 0)
           count++;
    }
     
    // Returning the count of
    // K-countdowns
    return count;
}
 
// Driver code
public static void main(String[] args)
{
    int N = 8;
    int K = 3;
    int arr[] = { 4, 3, 2, 1, 5, 3, 2, 1 };
     
    System.out.print(countKCountdown(arr, N, K));
}
}
 
// This code is contributed by divyeshrabadiya07


Python3




# Python3 code for the above program.
 
# Function to to count the
# number of K-countdowns for
# multiple queries
def countKCountdown(arr, N, K):
 
    # flag which stores the
    # current value of value
    # in the countdown
    flag = -1;
 
    # count of K-countdowns
    count = 0;
 
    # Loop to iterate over the
    # elements of the array
    for i in range(0, N):
 
        # condition check if
        # the elements
        # of the array is
        # equal to K
        if (arr[i] == K):
            flag = K;
 
        # condition check if
        # the elements
        # of the array is in
        # continuous order
        if (arr[i] == flag):
            flag -= 1;
 
        # condition check if
        # the elements
        # of the array are not
        # in continuous order
        else:
            flag = -1;
 
        # condition check to
        # increment the counter
        # if the there is a
        # K-countdown present
        # in the array
        if (flag == 0):
            count += 1;
     
    # returning the count of
    # K-countdowns
    return count;
 
# Driver Code
N = 8;
K = 3;
arr = [ 4, 3, 2, 1,
        5, 3, 2, 1 ];
 
# Function Call
print(countKCountdown(arr, N, K))
 
# This code is contributed by Akanksha_Rai


C#




// C# code for the above program.
using System;
class GFG{
     
// Function to to count the
// number of K-countdowns for
// multiple queries
public static int countKCountdown(int []arr,
                                  int N, int K)
{
     
    // Flag which stores the
    // current value of value
    // in the countdown
    int flag = -1;
     
    // Count of K-countdowns
    int count = 0;
     
    // Loop to iterate over the
    // elements of the array
    for(int i = 0; i < N; i++)
    {
         
    // Condition check if the
    // elements of the array is
    // equal to K
    if (arr[i] == K)
        flag = K;
             
    // Condition check if the
    // elements of the array is
    // in continuous order
    if (arr[i] == flag)
        flag--;
         
    // Condition check if the
    // elements of the array are
    // not in continuous order
    else
        flag = -1;
         
    // Condition check to increment
    // the counter if the there is a
    // K-countdown present in the array
    if (flag == 0)
        count++;
    }
     
    // Returning the count of
    // K-countdowns
    return count;
}
 
// Driver code
public static void Main()
{
    int N = 8;
    int K = 3;
    int []arr = { 4, 3, 2, 1, 5, 3, 2, 1 };
     
    Console.Write(countKCountdown(arr, N, K));
}
}
 
// This code is contributed by Akanksha_Rai


Javascript




<script>
//Javascript code for the above program.
 
// Function to to count the
// number of K-countdowns for
// multiple queries
function countKCountdown( arr, N, K)
{
 
    // flag which stores the
    // current value of value
    // in the countdown
    var flag = -1;
 
    // count of K-countdowns
    var count = 0;
 
    // Loop to iterate over the
    // elements of the array
    for (var i = 0; i < N; i++) {
 
        // condition check if
        // the elements
        // of the array is
        // equal to K
        if (arr[i] == K)
            flag = K;
 
        // condition check if
        // the elements
        // of the array is in
        // continuous order
        if (arr[i] == flag)
            flag--;
 
        // condition check if
        // the elements
        // of the array are not
        // in continuous order
        else
            flag = -1;
 
        // condition check to
        // increment the counter
        // if the there is a
        // K-countdown present
        // in the array
        if (flag == 0)
            count++;
    }
 
    // returning the count of
    // K-countdowns
    return count;
}
 
var N = 8;
var K = 3;
var arr = [ 4, 3, 2, 1, 5, 3, 2, 1 ];
// Function Call
document.write( countKCountdown(arr, N, K));
 
// This code is contributed by SoumikMondal
</script>


Output: 

2

 

Time Complexity: O(N) 
Auxiliary Space Complexity: O(1) 

 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

Dominic Rubhabha-Wardslaus
Dominic Rubhabha-Wardslaushttp://wardslaus.com
infosec,malicious & dos attacks generator, boot rom exploit philanthropist , wild hacker , game developer,
RELATED ARTICLES

Most Popular

Recent Comments