Dada una array arr[] que consiste en N enteros y dos enteros positivos K y M , la tarea es encontrar el número de subarreglos de tamaño K cuyo promedio es al menos M .
Ejemplos:
Entrada: arr[] = {2, 3, 3, 4, 4, 4, 5, 6, 6}, K = 3, M = 4
Salida: 4
Explicación:
A continuación se muestran los subarreglos de tamaño K(= 3) cuyos promedio es al menos M(= 4) como:
- arr[3, 5]: El promedio es 4 que es al menos M(= 4).
- arr[4, 6]: El promedio es 4.33 que es al menos M(= 4).
- arr[5, 7]: El promedio es 5 que es al menos M(= 4).
- arr[6, 8]: El promedio es 5.66 que es al menos M(= 4).
Por lo tanto, la cuenta del subarreglo está dada por 4.
Entrada: arr[] = {3, 6, 3, 2, 1, 3, 9] K = 2, M = 4
Salida: 3
Enfoque: El problema dado se puede resolver usando la Técnica de Dos Punteros y Ventana Deslizante . Siga los pasos a continuación para resolver el problema dado:
- Inicialice una variable, digamos contar como 0 que almacena el recuento de todos los subarreglos posibles.
- Inicialice una variable, digamos suma como 0 que almacena la suma de elementos del subarreglo de tamaño K .
- Encuentre la suma de los primeros elementos de la array K y guárdela en la variable sum . Si el valor de sum es al menos M*K , incremente el valor de count en 1 .
- Recorra la array dada arr[] sobre el rango [K, N – 1] usando la variable i y realice los siguientes pasos:
- Sume el valor de arr[i] a la variable suma y reste el valor de arr[i – K] de la suma .
- Si el valor de sum es al menos M*K , incremente el valor de count en 1 .
- Después de completar los pasos anteriores, imprima el valor de conteo como el conteo resultante de subarreglos.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <iostream> using namespace std; // Function to count the subarrays of // size K having average at least M int countSubArrays(int arr[], int N, int K, int M) { // Stores the resultant count of // subarray int count = 0; // Stores the sum of subarrays of // size K int sum = 0; // Add the values of first K elements // to the sum for (int i = 0; i < K; i++) { sum += arr[i]; } // Increment the count if the // current subarray is valid if (sum >= K * M) count++; // Traverse the given array for (int i = K; i < N; i++) { // Find the updated sum sum += (arr[i] - arr[i - K]); // Check if current subarray // is valid or not if (sum >= K * M) count++; } // Return the count of subarrays return count; } // Driver Code int main() { int arr[] = { 3, 6, 3, 2, 1, 3, 9 }; int K = 2, M = 4; int N = sizeof(arr) / sizeof(arr[0]); cout << countSubArrays(arr, N, K, M); return 0; }
Java
// Java program for the above approach import java.util.*; class GFG { // Driver Code public static void main(String[] args) { int[] arr = { 3, 6, 3, 2, 1, 3, 9 }; int K = 2, M = 4; System.out.println(countSubArrays(arr, K, M)); } // Function to count the subarrays of // size K having average at least M public static int countSubArrays(int[] arr, int K, int M) { // Stores the resultant count of // subarray int count = 0; // Stores the sum of subarrays of // size K int sum = 0; // Add the values of first K elements // to the sum for (int i = 0; i < K; i++) { sum += arr[i]; } // Increment the count if the // current subarray is valid if (sum >= K * M) count++; // Traverse the given array for (int i = K; i < arr.length; i++) { // Find the updated sum sum += (arr[i] - arr[i - K]); // Check if current subarray // is valid or not if (sum >= K * M) count++; } // Return the count of subarrays return count; } } // This code is contributed by Kdheeraj.
Python3
# Python 3 code for the above approach # Function to count the subarrays of # size K having average at least M def countSubArrays(arr, N, K, M): # Stores the resultant count of # subarray count = 0 # Stores the sum of subarrays of # size K sum = 0 # Add the values of first K elements # to the sum for i in range(K): sum += arr[i] # Increment the count if the # current subarray is valid if sum >= K*M: count += 1 # Traverse the given array for i in range(K, N): # Find the updated sum sum += (arr[i] - arr[i - K]) # Check if current subarray # is valid or not if sum >= K*M: count += 1 # Return the count of subarrays return count # Driver Code if __name__ == '__main__': arr = [3, 6, 3, 2, 1, 3, 9] K = 2 M = 4 N = len(arr) count = countSubArrays(arr, N, K, M) print(count) # This code is contributed by Kdheeraj.
C#
// C# program for the above approach using System; public class GFG { // Driver Code public static void Main(String[] args) { int[] arr = { 3, 6, 3, 2, 1, 3, 9 }; int K = 2, M = 4; Console.WriteLine(countSubArrays(arr, K, M)); } // Function to count the subarrays of // size K having average at least M public static int countSubArrays(int[] arr, int K, int M) { // Stores the resultant count of // subarray int count = 0; // Stores the sum of subarrays of // size K int sum = 0; // Add the values of first K elements // to the sum for (int i = 0; i < K; i++) { sum += arr[i]; } // Increment the count if the // current subarray is valid if (sum >= K * M) count++; // Traverse the given array for (int i = K; i < arr.Length; i++) { // Find the updated sum sum += (arr[i] - arr[i - K]); // Check if current subarray // is valid or not if (sum >= K * M) count++; } // Return the count of subarrays return count; } } // This code is contributed by AnkThon
Javascript
<script> // JavaScript Program to implement // the above approach // Function to count the subarrays of // size K having average at least M function countSubArrays(arr, N, K, M) { // Stores the resultant count of // subarray let count = 0; // Stores the sum of subarrays of // size K let sum = 0; // Add the values of first K elements // to the sum for (let i = 0; i < K; i++) { sum += arr[i]; } // Increment the count if the // current subarray is valid if (sum >= K * M) count++; // Traverse the given array for (let i = K; i < N; i++) { // Find the updated sum sum += (arr[i] - arr[i - K]); // Check if current subarray // is valid or not if (sum >= K * M) count++; } // Return the count of subarrays return count; } // Driver Code let arr = [3, 6, 3, 2, 1, 3, 9]; let K = 2, M = 4; let N = arr.length; document.write(countSubArrays(arr, N, K, M)); // This code is contributed by Potta Lokesh </script>
3
Complejidad temporal: O(N)
Espacio auxiliar: O(1)