John es geólogo y necesita contar muestras de rocas para enviarlas a un laboratorio químico. Él tiene un problema. El laboratorio solo acepta muestras de roca por un rango de tamaños en ppm (partes por millón). Juan necesita tu ayuda. Su tarea es desarrollar un programa para obtener el número de rocas en cada rango aceptado por el laboratorio.
Declaración del problema: Dada una array samples[] que indica los tamaños de las muestras de roca y una array 2D ranges[] , la tarea es contar las muestras de roca que están en el rango ranges[i][0] a ranges[i][1] , para todo posible 1 <= i <= N .
Ejemplos:
Entrada: samples[] = {345, 604, 321, 433, 704, 470, 808, 718, 517, 811}, ranges[] = {{300, 380}, {400, 700}}
Salida: 2 4
Explicación :
Rango [300, 380]: Las muestras {345, 321} se encuentran en el rango. Por lo tanto, el recuento es 2.
Rango [400, 700]: las muestras {433, 604, 517, 470} se encuentran en el rango. Por lo tanto, la cuenta es 4.Entrada: muestras[] = {400, 567, 890, 765, 987}, rangos[] = {{300, 380}, {800, 1000}
Salida: 0 2
Enfoque: la idea es iterar muestras[] para cada rango[i] y contar el número de muestras que se encuentran en los rangos especificados. Siga los pasos a continuación para resolver el problema:
- Atraviesa los rangos de la array [].
- Para cada fila ranges[i] , recorra la array samples[] y cuente el número de muestras de rocas que se encuentran en el rango [ranges[i][0], ranges[i][1]] .
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program of the // above approach #include<bits/stdc++.h> using namespace std; void findRockSample(vector<vector<int>>ranges, int n, int r, vector<int>arr) { vector<int>a; // Iterate over the ranges for(int i = 0; i < r; i++) { int c = 0; int l = ranges[i][0]; int h = ranges[i][1]; for(int j = 0; j < arr.size(); j++) { if (l <= arr[j] && arr[j] <= h) c += 1; } a.push_back(c); } for(auto i:a) cout << i << " "; } // Driver Code int main() { int n = 5; int r = 2; vector<int>arr = { 400, 567, 890, 765, 987 }; vector<vector<int>>ranges = { { 300, 380 }, { 800, 1000 } }; // Function call findRockSample(ranges, n, r, arr); } // This code is contributed by Stream_Cipher
Java
// Java program of the // above approach import java.util.*; import java.io.*; class GFG{ // Function to find the rock // samples in the ranges static ArrayList<Integer>findRockSample(int ranges[][], int n, int r, int arr[]) { ArrayList<Integer> a = new ArrayList<>(); // Iterate over the ranges for(int i = 0; i < r; i++) { int c = 0; int l = ranges[i][0]; int h = ranges[i][1]; for(int j = 0; j < arr.length; j++) { if (l <= arr[j] && arr[j] <= h) c += 1; } a.add(c); } return a; } // Driver Code public static void main(String args[]) { int n = 5; int r = 2; int arr[] = { 400, 567, 890, 765, 987 }; int ranges[][] = { { 300, 380 }, { 800, 1000 } }; ArrayList<Integer> answer = new ArrayList<>(); // Function call answer = findRockSample(ranges, n, r, arr); for(int i = 0; i < answer.size(); i++) System.out.print(answer.get(i) + " "); System.out.println(); } } // This code is contributed by bikram2001jha
Python3
# Python3 program of the # above approach # Function to find the rock # samples in the ranges def findRockSample(ranges, n, r, arr): a = [] # Iterate over the ranges for i in range(r): c = 0 l, h = ranges[i][0], ranges[i][1] for val in arr: if l <= val <= h: c += 1 a.append(c) return a # Driver Code if __name__ == "__main__": n = 5 r = 2 arr = [400, 567, 890, 765, 987] ranges = [[300, 380], [800, 1000]] # Function Call print(*findRockSample(ranges, n, r, arr))
C#
// C# program of the // above approach using System.Collections.Generic; using System; class GFG{ // Function to find the rock // samples in the ranges static void findRockSample(int [,]ranges, int n, int r, int [] arr) { List<int> a = new List<int>(); // Iterate over the ranges for(int i = 0; i < r; i++) { int c = 0; int l = ranges[i, 0]; int h = ranges[i, 1]; for(int j = 0; j < arr.Length; j++) { if (l <= arr[j] && arr[j] <= h) c += 1; } a.Add(c); } foreach (var i in a) { Console.Write(i + " "); } } // Driver Code public static void Main() { int n = 5; int r = 2; int []arr = { 400, 567, 890, 765, 987 }; int [,]ranges = { { 300, 380 }, { 800, 1000 } }; // Function call findRockSample(ranges, n, r, arr); } } // This code is contributed by Stream_Cipher
Javascript
<script> // Javascript program of the above approach // Function to find the rock // samples in the ranges function findRockSample(ranges, n, r, arr) { let a = []; // Iterate over the ranges for(let i = 0; i < r; i++) { let c = 0; let l = ranges[i][0]; let h = ranges[i][1]; for(let j = 0; j < arr.length; j++) { if (l <= arr[j] && arr[j] <= h) c += 1; } a.push(c); } for(let i = 0; i < a.length; i++) { document.write(a[i] + " "); } } let n = 5; let r = 2; let arr = [ 400, 567, 890, 765, 987 ]; let ranges = [ [ 300, 380 ], [ 800, 1000 ] ]; // Function call findRockSample(ranges, n, r, arr); </script>
0 2
Complejidad de Tiempo: O(N 2 )
Espacio Auxiliar: O(1)