Reduzca la array dada reemplazando subarreglos de longitud al menos K que consisten en números pares con su longitud

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 .
  • 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>
Producción

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *