Se requieren inserciones de array mínimas para hacer una diferencia consecutiva <= K

Dada una array de enteros H que representa las alturas de los edificios y un entero K . La tarea es llegar al último edificio desde el primero con las siguientes reglas: 

  1. Llegar a un edificio de altura H j desde un edificio de altura H i solo es posible si |H i – H j | <= K y el edificio aparece uno tras otro en la array.
  2. Si no es posible llegar a un edificio, se pueden insertar varios edificios de alturas intermedias entre los dos edificios.

Encuentre el número mínimo de inserciones realizadas en el paso 2 para que sea posible pasar del primer edificio al último.

Ejemplos:

Input: H[] = {2, 4, 8, 16}, K = 3 
Output: 3 
Add 1 building of height 5 between buildings of height 4 and 8. 
And add 2 buildings of heights 11 and 14 respectively between buildings of height 8 and 16.
Input: H[] = {5, 55, 100, 1000}, K = 10 
Output: 97  

Acercarse:  

  • Ejecute un ciclo de 1 a n-1 y compruebe si abs(H[i] – H[i-1]) <= K.
  • Si la condición anterior es verdadera, salte a la siguiente iteración del ciclo.
  • Si la condición es falsa, las inserciones requeridas serán iguales a ceil(diff / K) – 1 donde diff = abs(H[i] – H[i-1])
  • Imprime el total de inserciones al final.

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

C++

// CPP implementation of above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return minimum
// number of insertions required
int minInsertions(int H[], int n, int K)
{
    // Initialize insertions to 0
    int inser = 0;
 
    for (int i = 1; i < n; ++i) {
        float diff = abs(H[i] - H[i - 1]);
 
        if (diff <= K)
            continue;
        else
            inser += ceil(diff / K) - 1;
    }
 
    // return total insertions
    return inser;
}
 
// Driver program
int main()
{
    int H[] = { 2, 4, 8, 16 }, K = 3;
    int n = sizeof(H) / sizeof(H[0]);
    cout << minInsertions(H, n, K);
    return 0;
}

Java

// Java implementation of above approach
 
class GFG{
// Function to return minimum
// number of insertions required
static int minInsertions(int[] H, int n, int K)
{
    // Initialize insertions to 0
    int inser = 0;
 
    for (int i = 1; i < n; ++i) {
        float diff = Math.abs(H[i] - H[i - 1]);
 
        if (diff <= K)
            continue;
        else
            inser += Math.ceil(diff / K) - 1;
    }
 
    // return total insertions
    return inser;
}
 
// Driver program
public static void main(String[] args)
{
    int[] H = new int[]{ 2, 4, 8, 16 };
    int K = 3;
    int n = H.length;
    System.out.println(minInsertions(H, n, K));
}
}
// This code is contributed by mits

Python3

# Python3 implementation of above approach
import math
 
# Function to return minimum
# number of insertions required
def minInsertions(H, n, K):
 
    # Initialize insertions to 0
    inser = 0;
 
    for i in range(1, n):
        diff = abs(H[i] - H[i - 1]);
 
        if (diff <= K):
            continue;
        else:
            inser += math.ceil(diff / K) - 1;
 
    # return total insertions
    return inser;
 
# Driver Code
H = [2, 4, 8, 16 ];
K = 3;
n = len(H);
print(minInsertions(H, n, K));
 
# This code is contributed
# by mits

C#

// C# implementation of above approach
using System;
 
class GFG
{
// Function to return minimum
// number of insertions required
static int minInsertions(int[] H,
                         int n, int K)
{
    // Initialize insertions to 0
    int inser = 0;
 
    for (int i = 1; i < n; ++i)
    {
        float diff = Math.Abs(H[i] - H[i - 1]);
 
        if (diff <= K)
            continue;
        else
            inser += (int)Math.Ceiling(diff / K) - 1;
    }
 
    // return total insertions
    return inser;
}
 
// Driver Code
static void Main()
{
    int[] H = new int[]{ 2, 4, 8, 16 };
    int K = 3;
    int n = H.Length;
    Console.WriteLine(minInsertions(H, n, K));
}
}
 
// This code is contributed by mits

PHP

<?php
// PHP implementation of above approach
 
// Function to return minimum
// number of insertions required
function minInsertions($H, $n, $K)
{
    // Initialize insertions to 0
    $inser = 0;
 
    for ($i = 1; $i < $n; ++$i)
    {
        $diff = abs($H[$i] - $H[$i - 1]);
 
        if ($diff <= $K)
            continue;
        else
            $inser += ceil($diff / $K) - 1;
    }
 
    // return total insertions
    return $inser;
}
 
// Driver Code
$H = array(2, 4, 8, 16 );
$K = 3;
$n = sizeof($H);
echo minInsertions($H, $n, $K);
 
// This code is contributed
// by Akanksha Rai(Abby_akku)
?>

Javascript

<script>
// Javascript implementation of above approach
 
// Function to return minimum
// number of insertions required
function minInsertions( H, n, K)
{
    // Initialize insertions to 0
    var inser = 0;
 
    for (var i = 1; i < n; ++i) {
        var diff = Math.abs(H[i] - H[i - 1]);
 
        if (diff <= K)
            continue;
        else
            inser += Math.ceil(diff / K) - 1;
    }
 
    // return total insertions
    return inser;
}
 
var H = [ 2, 4, 8, 16 ];
var K = 3;
var n = H.length;
document.write(minInsertions(H, n, K));
 
// This code is contributed by SoumikMondal
</script>
Producción

3

Complejidad de tiempo: O(N), ya que un bucle se ejecuta N veces.

Espacio Auxiliar: O(1), ya que no se ha ocupado ningún espacio extra.

Publicación traducida automáticamente

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