Recuento del subarreglo de longitud K con cada elemento menor que X veces el siguiente

Dada una array A[] de longitud N y dos enteros X y K , la tarea es contar el número de índices i (0 ≤ i < N−k) tales que:
X 0 ⋅a i < X 1 ⋅a i + 1 < X 2 ⋅a yo+2 < . . . < X k ⋅a i+k.

Ejemplos:

Entrada: A[] = {9, 5, 3, 4, 1}, X = 4, K = 1.
Salida: 3.
Explicación: tres subarreglos cumplen las condiciones:
i = 0: el subarreglo [a0, a1] = [9, 5] y 1,9 < 4,5.
i = 1: el subarreglo [a1, a2] = [5, 3] y 1.5 < 4.3.
i = 2: el subarreglo [a2, a3] = [3, 2] y 1.3 < 4.4.
i = 3: el subarreglo [a3, a4] = [2, 1] pero 1,4 = 4,1, por lo que este subarreglo no cumple la condición.

Entrada : A[] = {22, 12, 16, 4, 3, 22, 12}, X = 2, K = 3. Salida: 1
Explicación :
Hay un total de 4 subarreglo de los cuales 1 satisface la condición dada.
i = 0: el subarreglo [a0, a1, a2, a3] = [22, 12, 16, 4] y 1,22 < 2,12 < 4,16 > 8,4, por lo que este subarreglo no cumple la condición.
i = 1: el subarreglo [a1, a2, a3, a4]=[12, 16, 4, 3] y 1,12 < 2,16 > 4,4 < 8,3, por lo que este subarreglo no cumple la condición.
i = 2: el subarreglo [a2, a3, a4, a5]=[16, 4, 3, 22] y 1,16 > 2,4 < 4,8 < 8,22, por lo que este subarreglo no cumple la condición.
i = 3: el subarreglo [a3, a4, a5, a6]=[4, 3, 22, 12] y 1.4 < 2.3 < 4.22 < 8.12, entonces este subarreglo satisface la condición.

 

Enfoque ingenuo: para resolver el problema, siga la siguiente idea.

Encuentre todo el subarreglo de longitud K+1 y tal que cada elemento en el subarreglo sea X veces más pequeño que su siguiente elemento en el subarreglo.

Siga los pasos a continuación para implementar la idea:

  • Ejecute un ciclo for desde i = 0 hasta i < N-(K+1). En cada iteración:
    • Ejecute un ciclo for de i a i+K y calcule que cada elemento en este subarreglo es X veces más pequeño que el siguiente elemento.
    • Después de la terminación del ciclo, si cada elemento en este ciclo es X veces más pequeño, el siguiente elemento incrementa la variable en 1.
  • Imprime la respuesta.

 A continuación se muestra la implementación del enfoque anterior:

C++

// C++ code to implement the approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function performing Calculation
int solve(int a[], int n, int k, int X)
{
    int ans = 0;
    for (int i = 0; i < n - (k + 1); i++) {
        bool flag = true;
        for (int j = i; j < k; j++) {
            if (a[j] < X * a[j + 1])
                continue;
            else {
                flag = false;
            }
        }
        if (flag)
            ans++;
    }
    return ans;
}
 
// Driver Code
int main()
{
    int A[] = { 9, 5, 3, 4, 1 };
    int N = sizeof(A) / sizeof(A[0]);
    int K = 1, X = 4;
 
    // Function Call
    cout << solve(A, N, K, X);
    return 0;
}

Java

// Java code to implement the approach
import java.io.*;
 
class GFG {
 
  // Function performing Calculation
  static int solve(int[] a, int n, int k, int X)
  {
    int ans = 0;
    for (int i = 0; i < n - (k + 1); i++) {
      boolean flag = true;
      for (int j = i; j < k; j++) {
        if (a[j] < X * a[j + 1]) {
          continue;
        }
        else {
          flag = false;
        }
      }
      if (flag) {
        ans++;
      }
    }
    return ans;
  }
 
  public static void main(String[] args)
  {
    int[] A = { 9, 5, 3, 4, 1 };
    int N = A.length;
    int K = 1, X = 4;
 
    // Function call
    System.out.print(solve(A, N, K, X));
  }
}
 
// This code is contributed by lokesh (lokeshmvs21).

Javascript

<script>
// Javascript code to implement the approach
 
// Function performing Calculation
function solve(a, n, k, X)
{
    let ans = 0;
    for (let i = 0; i < n - (k + 1); i++) {
        let flag = true;
        for (let j = i; j < k; j++) {
            if (a[j] < X * a[j + 1])
                continue;
            else {
                flag = false;
            }
        }
        if (flag)
            ans++;
    }
    return ans;
}
 
// Driver Code
    let A = [ 9, 5, 3, 4, 1 ];
    let N = A.length;
    let K = 1, X = 4;
 
    // Function Call
    document.write(solve(A, N, K, X));
     
    // This code is contributed by satwik4409.
    </script>
Producción

3

Complejidad temporal : O(N * K)
Espacio auxiliar: O(1).

Enfoque eficiente: para resolver el problema, siga la siguiente idea.

Usando el enfoque de dos punteros y verificando si cada elemento en el subarreglo es 4 veces más pequeño que su siguiente elemento y luego moviendo la ventana hacia adelante hasta que se alcance el último elemento.

Siga los pasos a continuación para implementar la idea:

  • Ejecute un ciclo while de j = 0 a j < N – 1 . En cada iteración:
    • Compruebe si la longitud de la ventana es igual a K + 1 (es decir, j – i + 1 = k + 1) y luego incremente la respuesta en 1 .
    • Si j th elemento es menor que X veces (j + 1) th elemento (A[j] < X*A[j + 1]), entonces incremente j en 1; de lo contrario, mueva el puntero i a j ya que no hay subarreglo que contenga j th y (j+1) el elemento juntos puede satisfacer la condición dada.
  • Imprime la respuesta.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ code to implement the approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function performing Calculation
int solve(int a[], int n, int k, int X)
{
    int ans = 0;
    int i = 0, j = 0;
 
    // Loop to utilize the sliding window concept
    while (j < n - 1) {
        if (j - i + 1 == k + 1) {
            i++;
            ans++;
        }
        if (a[j] < a[j + 1] * X) {
            j++;
        }
        else {
            i = j;
            j++;
        }
    }
    return ans;
}
 
// Driver Code
int main()
{
    int A[] = { 9, 5, 3, 4, 1 };
    int N = sizeof(A) / sizeof(A[0]);
    int K = 1, X = 4;
 
    // Function Call
    cout << solve(A, N, K, X);
    return 0;
}

Python3

# Python code to implement the approach
 
# Function performing Calculation
def solve(a, n, k, X):
    ans = 0
    for i in range(n - (k + 1)):
        flag = True
        for j in range(i, k):
            if a[j] < X * a[j + 1]:
                continue
            else:
                flag = False
        if flag:
            ans += 1
    return ans
 
if __name__ == '__main__':
    A = [9, 5, 3, 4, 1]
    N = len(A)
    K = 1
    X = 4
 
    # Function Call
    print(solve(A, N, K, X))
 
# This code is contributed by Tapesh(tapeshdua420)

Javascript

<script>
    // JavaScript code to implement the approach
 
    // Function performing Calculation
    const solve = (a, n, k, X) => {
        let ans = 0;
        let i = 0, j = 0;
 
        // Loop to utilize the sliding window concept
        while (j < n - 1) {
            if (j - i + 1 == k + 1) {
                i++;
                ans++;
            }
            if (a[j] < a[j + 1] * X) {
                j++;
            }
            else {
                i = j;
                j++;
            }
        }
        return ans;
    }
 
    // Driver Code
 
    let A = [9, 5, 3, 4, 1];
    let N = A.length;
    let K = 1, X = 4;
 
    // Function Call
    document.write(solve(A, N, K, X));
 
    // This code is contributed by rakeshsahni
 
</script>
Producción

3

Complejidad temporal: O(N)
Espacio auxiliar: O(1)                                                                             

Publicación traducida automáticamente

Artículo escrito por ansh270702 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 *