Open In App

Count of K-countdowns in an Array

Last Updated : 20 May, 2021
Comments
Improve
Suggest changes
5 Likes
Like
Report

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 Python3 C# JavaScript

Output: 
2

 

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


Similar Reads