Dada una array ordenada de tamaño N , la tarea es reducir la array de modo que cada elemento pueda aparecer como máximo K veces.
Ejemplos:
Entrada: arr[] = {1, 2, 2, 2, 3}, K = 2
Salida: {1, 2, 2, 3}
Explicación:
elimine 2 una vez, ya que aparece más de 2 veces.
Entrada: arr[] = {3, 3, 3}, K = 1
Salida: {3}
Explicación:
elimine 3 dos veces, ya que aparece más de 1 vez.
Acercarse:
- Atraviesa la array dada arr
- Mantenga el conteo de cada elemento único en la array mientras atraviesa, usando un puntero i
- Si la frecuencia actual de arr[i] hasta el índice i es menor o igual a K, agregue el elemento arr[i] a la nueva array reducida e incremente la frecuencia en 1.
- Si la frecuencia actual de arr[i] hasta el índice i es mayor que K, omita hasta que encuentre el siguiente elemento único.
- Después de que termine el recorrido, imprima la array reducida.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to reduce the array // such that each element appears // at most K times #include <bits/stdc++.h> using namespace std; // Function to reduce the array void reduceArray(int arr[], int n, int K) { // Vector to store the reduced array vector<int> vec; int size = 0; int curr_ele = arr[0], curr_freq = 1; // Iterate over the array for (int i = 0; i < n; i++) { if (curr_ele == arr[i] && curr_freq <= K) { vec.push_back(arr[i]); size++; } else if (curr_ele != arr[i]) { curr_ele = arr[i]; vec.push_back(arr[i]); size++; curr_freq = 1; } curr_freq++; } // Print the reduced array cout << "{"; for (int i = 0; i < size; i++) { cout << vec[i] << ", "; } cout << "}"; } // Driver code int main() { int arr[] = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 5 }; int n = sizeof(arr) / sizeof(arr[0]); int K = 2; // Function call reduceArray(arr, n, K); return 0; }
Java
// Java program to reduce the array // such that each element appears // at most K times import java.util.*; class GFG{ // Function to reduce the array static void reduceArray(int arr[], int n, int K) { // Vector to store the reduced array Vector<Integer> vec = new Vector<Integer>(); int size = 0; int curr_ele = arr[0], curr_freq = 1; // Iterate over the array for (int i = 0; i < n; i++) { if (curr_ele == arr[i] && curr_freq <= K) { vec.add(arr[i]); size++; } else if (curr_ele != arr[i]) { curr_ele = arr[i]; vec.add(arr[i]); size++; curr_freq = 1; } curr_freq++; } // Print the reduced array System.out.print("{"); for (int i = 0; i < size; i++) { System.out.print(vec.get(i)+ ", "); } System.out.print("}"); } // Driver code public static void main(String[] args) { int arr[] = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 5 }; int n = arr.length; int K = 2; // Function call reduceArray(arr, n, K); } } // This code is contributed by PrinciRaj1992
Python3
# Python3 program to reduce the array # such that each element appears # at most K times # Function to reduce the array def reduceArray(arr, n, K) : # List to store the reduced array vec = []; size = 0; curr_ele = arr[0]; curr_freq = 1; # Iterate over the array for i in range(n) : if (curr_ele == arr[i] and curr_freq <= K) : vec.append(arr[i]); size += 1; elif (curr_ele != arr[i]) : curr_ele = arr[i]; vec.append(arr[i]); size += 1; curr_freq = 1; curr_freq += 1; # Print the reduced array print("{",end= ""); for i in range(size) : print(vec[i] ,end= ", "); print("}",end=""); # Driver code if __name__ == "__main__" : arr = [ 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 5 ]; n = len(arr) K = 2; # Function call reduceArray(arr, n, K); # This code is contributed by AnkitRai01
C#
// C# program to reduce the array // such that each element appears // at most K times using System; using System.Collections.Generic; class GFG{ // Function to reduce the array static void reduceArray(int []arr, int n, int K) { // List to store the reduced array List<int> vec = new List<int>(); int size = 0; int curr_ele = arr[0], curr_freq = 1; // Iterate over the array for (int i = 0; i < n; i++) { if (curr_ele == arr[i] && curr_freq <= K) { vec.Add(arr[i]); size++; } else if (curr_ele != arr[i]) { curr_ele = arr[i]; vec.Add(arr[i]); size++; curr_freq = 1; } curr_freq++; } // Print the reduced array Console.Write("{"); for (int i = 0; i < size; i++) { Console.Write(vec[i]+ ", "); } Console.Write("}"); } // Driver code public static void Main(String[] args) { int []arr = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 5 }; int n = arr.Length; int K = 2; // Function call reduceArray(arr, n, K); } } // This code is contributed by Princi Singh
Javascript
<script> // JavaScript program to reduce the array // such that each element appears // at most K times // Function to reduce the array function reduceArray( arr, n, K) { // Vector to store the reduced array var vec=[]; var size = 0; var curr_ele = arr[0], curr_freq = 1; // Iterate over the array for (var i = 0; i < n; i++) { if (curr_ele == arr[i] && curr_freq <= K) { vec.push(arr[i]); size++; } else if (curr_ele != arr[i]) { curr_ele = arr[i]; vec.push(arr[i]); size++; curr_freq = 1; } curr_freq++; } // Print the reduced array document.write( "{"); for (var i = 0; i < size; i++) { document.write( vec[i] +", "); } document.write("}"); } var arr = [ 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 5 ]; var n = 14; var K = 2; // Function call reduceArray(arr, n, K); </script>
Producción:
{1, 1, 2, 2, 3, 3, 4, 5, }
Complejidad temporal: O(N)
Complejidad espacial: O(1)