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:
- 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.
- 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