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: 2
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: 2
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> |
2
Time Complexity: O(N)
Auxiliary Space Complexity: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!