Count subarrays with all elements greater than K
Given an array of N integers and a number K, the task is to find the number of subarrays such that all elements are greater than K in it.
Examples:
Input: a[] = {3, 4, 5, 6, 7, 2, 10, 11}, K = 5
Output: 6
The possible subarrays are {6}, {7}, {6, 7}, {10}, {11} and {10, 11}.
Input: a[] = {8, 25, 10, 19, 19, 18, 20, 11, 18}, K = 13
Output: 12
Approach: The idea is to start traversing the array using a counter. If the current element is greater than the given value X, increment the counter otherwise add counter*(counter+1)/2 to the number of subarrays and reinitialize counter to 0.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int countSubarrays( int a[], int n, int x)
{
int count = 0;
int number = 0;
for ( int i = 0; i < n; i++) {
if (a[i] > x) {
count += 1;
}
else {
number += (count) * (count + 1) / 2;
count = 0;
}
}
if (count)
number += (count) * (count + 1) / 2;
return number;
}
int main()
{
int a[] = { 3, 4, 5, 6, 7, 2, 10, 11 };
int n = sizeof (a) / sizeof (a[0]);
int k = 5;
cout << countSubarrays(a, n, k);
return 0;
}
|
Java
import java.io.*;
class GFG {
static int countSubarrays( int a[], int n, int x)
{
int count = 0 ;
int number = 0 ;
for ( int i = 0 ; i < n; i++) {
if (a[i] > x) {
count += 1 ;
}
else {
number += (count) * (count + 1 ) / 2 ;
count = 0 ;
}
}
if (count!= 0 )
number += (count) * (count + 1 ) / 2 ;
return number;
}
public static void main (String[] args) {
int a[] = { 3 , 4 , 5 , 6 , 7 , 2 , 10 , 11 };
int n = a.length;
int k = 5 ;
System.out.println (countSubarrays(a, n, k));
}
}
|
Python3
def countSubarrays(a, n, x):
count = 0
number = 0
for i in range (n):
if (a[i] > x):
count + = 1
else :
number + = (count) * (count + 1 ) / 2
count = 0
if (count):
number + = (count) * (count + 1 ) / 2
return int (number)
if __name__ = = '__main__' :
a = [ 3 , 4 , 5 , 6 , 7 , 2 , 10 , 11 ]
n = len (a)
k = 5
print (countSubarrays(a, n, k))
|
C#
using System;
class GFG {
static int countSubarrays( int []a, int n, int x)
{
int count = 0;
int number = 0;
for ( int i = 0; i < n; i++) {
if (a[i] > x) {
count += 1;
}
else {
number += (count) * (count + 1) / 2;
count = 0;
}
}
if (count!=0)
number += (count) * (count + 1) / 2;
return number;
}
public static void Main () {
int []a = { 3, 4, 5, 6, 7, 2, 10, 11 };
int n = a.Length;
int k = 5;
Console.WriteLine(countSubarrays(a, n, k));
}
}
|
PHP
<?php
function countSubarrays( $a , $n , $x )
{
$count = 0; $number = 0;
for ( $i = 0; $i < $n ; $i ++)
{
if ( $a [ $i ] > $x )
{
$count += 1;
}
else
{
$number += ( $count ) *
( $count + 1) / 2;
$count = 0;
}
}
if ( $count )
$number += ( $count ) *
( $count + 1) / 2;
return $number ;
}
$a = array (3, 4, 5, 6, 7, 2, 10, 11);
$n = count ( $a );
$k = 5;
echo countSubarrays( $a , $n , $k );
?>
|
Javascript
<script>
function countSubarrays(a , n , x) {
var count = 0;
var number = 0;
for (i = 0; i < n; i++) {
if (a[i] > x) {
count += 1;
} else {
number += (count) * (count + 1) / 2;
count = 0;
}
}
if (count != 0)
number += (count) * (count + 1) / 2;
return number;
}
var a = [ 3, 4, 5, 6, 7, 2, 10, 11 ];
var n = a.length;
var k = 5;
document.write(countSubarrays(a, n, k));
</script>
|
Complexity Analysis:
- Time Complexity: O(N)
- Auxiliary Space: O(1)
Related Topic: Subarrays, Subsequences, and Subsets in Array
Last Updated :
12 Sep, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...