Dado un arreglo arr[] de longitud N , la tarea es reemplazar todos los subarreglos de solo elementos pares por su longitud si la longitud es mayor o igual a K .
Ejemplos:
Entrada: arr[] = {3, 6, 10, 2, 7, 6, 4, 8}, K = 2
Salida: 3 3 7 3
Explicación: Hay dos subarreglos con números pares consecutivos {6, 10, 2} y {6, 4, 8}.
Entonces se reemplazan por su longitud 3 y 3 respectivamente.Entrada: arr[] = {4, 8, 3, 6, 8}, K=3
Salida: 4 8 3 6 8
Explicación: No existe ningún subarreglo cuya longitud de números pares consecutivos sea mayor o igual a 3.
Enfoque: siga los pasos a continuación para responder a este problema:
- Cree dos vectores, uno para almacenar respuestas ans y otro para almacenar números pares consecutivos temp .
- Si (K >= N) , devuelve el vector original arr .
- Ahora, recorra la array, y para cada elemento:
- Si el elemento actual es impar, compruebe si la longitud de la temperatura es mayor o igual a K .
- Si es así, empuje su longitud en ans vector.
- De lo contrario, empuje los elementos de temp en ans vector.
- Borrar el vector temporal.
- Empuje el elemento actual en el vector ans .
- Si el elemento actual es par, empújelo en temp .
- Si el elemento actual es impar, compruebe si la longitud de la temperatura es mayor o igual a K .
- Una vez que finaliza el ciclo, el vector ans contiene la respuesta final.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to replace all subarrays of // even elements with their length if their // length is greater than or equal to K vector<int> processArray(vector<int>& arr, int& K) { int N = arr.size(), i, count = 0; vector<int> ans; vector<int> temp; if (K >= N) return arr; for (i = 0; i < N; i++) { // If arr[i] is odd if (arr[i] & 1) { if (temp.size() >= K) ans.push_back(temp.size()); else { for (auto& x : temp) { ans.push_back(x); } } ans.push_back(arr[i]); temp.clear(); } // If arr[i] is even else { temp.push_back(arr[i]); } } if (temp.size() >= K) { ans.push_back(temp.size()); } else { for (auto& x : temp) { ans.push_back(x); } } return ans; } // Driver Code int main() { vector<int> arr = { 3, 6, 10, 2, 7, 6, 4, 8 }; int K = 2; vector<int> ans = processArray(arr, K); for (auto& x : ans) cout << x << " "; return 0; }
Java
// Java program for the above approach import java.util.ArrayList; import java.util.Arrays; import java.util.List; class GFG { // Function to replace all subarrays of // even elements with their length if their // length is greater than or equal to K static List<Integer> processArray(List<Integer> arr, int K) { int N = arr.size(); ArrayList<Integer> ans = new ArrayList<Integer>(); ArrayList<Integer> temp = new ArrayList<Integer>(); ; if (K >= N) return arr; for (int i = 0; i < N; i++) { // If arr[i] is odd if ((arr.get(i) & 1) > 0) { if (temp.size() >= K) ans.add(temp.size()); else { for (int x : temp) { ans.add(x); } } ans.add(arr.get(i)); temp.clear(); } // If arr[i] is even else { temp.add(arr.get(i)); } } if (temp.size() >= K) { ans.add(temp.size()); } else { for (int x : temp) { ans.add(x); } } return ans; } // Driver Code public static void main(String args[]) { List<Integer> arr = Arrays.asList(3, 6, 10, 2, 7, 6, 4, 8); int K = 2; List<Integer> ans = processArray(arr, K); for (int x : ans) System.out.print(x + " "); } } // This code is contributed by saurabh_jaiswal.
Python3
# python3 program for the above approach # Function to replace all subarrays of # even elements with their length if their # length is greater than or equal to K def processArray(arr, K): N, count = len(arr), 0 ans = [] temp = [] if (K >= N): return arr for i in range(0, N): # If arr[i] is odd if (arr[i] & 1): if (len(temp) >= K): ans.append(len(temp)) else: for x in temp: ans.append(x) ans.append(arr[i]) temp.clear() # If arr[i] is even else: temp.append(arr[i]) if (len(temp) >= K): ans.append(len(temp)) else: for x in temp: ans.append(x) return ans # Driver Code if __name__ == "__main__": arr = [3, 6, 10, 2, 7, 6, 4, 8] K = 2 ans = processArray(arr, K) for x in ans: print(x, end=" ") # This code is contributed by rakeshsahni
C#
// C# program for the above approach using System; using System.Collections.Generic; public class GFG { // Function to replace all subarrays of // even elements with their length if their // length is greater than or equal to K static List<int> processArray(List<int> arr, int K) { int N = arr.Count; List<int> ans = new List<int>(); List<int> temp = new List<int>(); ; if (K >= N) return arr; for (int i = 0; i < N; i++) { // If arr[i] is odd if ((arr[i] & 1) > 0) { if (temp.Count >= K) ans.Add(temp.Count); else { foreach (int x in temp) { ans.Add(x); } } ans.Add(arr[i]); temp.Clear(); } // If arr[i] is even else { temp.Add(arr[i]); } } if (temp.Count >= K) { ans.Add(temp.Count); } else { foreach (int x in temp) { ans.Add(x); } } return ans; } // Driver Code public static void Main(String []args) { List<int> arr = new List<int>(new int[]{3, 6, 10, 2, 7, 6, 4, 8}); int K = 2; List<int> ans = processArray(arr, K); foreach (int x in ans) Console.Write(x + " "); } } // This code is contributed by 29AjayKumar
Javascript
<script> // JavaScript code for the above approach // Function to replace all subarrays of // even elements with their length if their // length is greater than or equal to K function processArray(arr, K) { let N = arr.length, i, count = 0; let ans = []; let temp = []; if (K >= N) return arr; for (i = 0; i < N; i++) { // If arr[i] is odd if (arr[i] & 1) { if (temp.length >= K) ans.push(temp.length); else { for (let x of temp) { ans.push(x); } } ans.push(arr[i]); temp = []; } // If arr[i] is even else { temp.push(arr[i]); } } if (temp.length >= K) { ans.push(temp.length); } else { for (let x of temp) { ans.push(x); } } return ans; } // Driver Code let arr = [3, 6, 10, 2, 7, 6, 4, 8]; let K = 2; let ans = processArray(arr, K); for (let x of ans) document.write(x + " "); // This code is contributed by Potta Lokesh </script>
3 3 7 3
Complejidad temporal: O(N)
Espacio auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por prophet1999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA