Dada una array de enteros arr[] de tamaño N y un entero K , la tarea es encontrar el índice que será el último en reducirse a cero después de realizar una operación determinada. La operación se describe de la siguiente manera:
- Comenzando desde arr[0] hasta arr[N – 1] , actualice cada elemento como arr[i] = arr[i] – K .
- Si arr[i] < K , establezca arr[i] = 0 y no se realizará ninguna otra operación en arr[i] una vez que sea 0 .
- Repita los pasos anteriores hasta que todos los elementos se reduzcan a 0 .
Imprime el índice que será el último en convertirse en cero.
Ejemplos:
Entrada: arr[] = { 3, 2, 5, 7, 2, 9 }, K = 4
Salida: 5
Operación 1: arr[] = {0, 0, 1, 3, 0, 5}
Operación 2: arr [] = {0, 0, 0, 0, 0, 1}
Operación 3: arr[] = {0, 0, 0, 0, 0, 0}
El índice 5 es el último en reducirse.
Entrada: arr[] = { 31, 12, 25, 27, 32, 19 }, K = 5
Salida: 4
Enfoque: en cada paso , el elemento en un índice particular se resta por K. Entonces, un elemento en particular toma ceil(arr[i] / K) o (arr[i] + K – 1) / K pasos para reducirse a cero. Entonces, el índice requerido viene dado por el índice de la array con el valor máximo (arr[i] + K – 1)/K . Si el valor máximo está presente más de una vez, devuelve el índice más grande a medida que la operación se realiza de 0 a N – 1 .
A continuación se muestra la implementación del enfoque anterior:
CPP
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function that returns the index // which will be the last to become // zero after performing given operation int findIndex(int a[], int n, int k) { // Initialize the result int index = -1, max_ceil = INT_MIN; for (int i = 0; i < n; i++) { // Finding the ceil value // of each index a[i] = (a[i] + k - 1) / k; } for (int i = 0; i < n; i++) { // Finding the index with // maximum ceil value if (a[i] >= max_ceil) { max_ceil = a[i]; index = i; } } return index; } // Driver code int main() { int arr[] = { 31, 12, 25, 27, 32, 19 }; int K = 5; int N = sizeof(arr) / sizeof(arr[0]); cout << findIndex(arr, N, K); return 0; }
Java
// Java implementation of the approach import java .io.*; class GFG { // Function that returns the index // which will be the last to become // zero after performing given operation static int findIndex(int[] a, int n, int k) { // Initialize the result int index = -1, max_ceil = Integer.MIN_VALUE; for (int i = 0; i < n; i++) { // Finding the ceil value // of each index a[i] = (a[i] + k - 1) / k; } for (int i = 0; i < n; i++) { // Finding the index with // maximum ceil value if (a[i] >= max_ceil) { max_ceil = a[i]; index = i; } } return index; } // Driver code static public void main (String[] args) { int []arr = { 31, 12, 25, 27, 32, 19 }; int K = 5; int N = arr.length ; System.out.print(findIndex(arr, N, K)); } } // This code is contributed by anuj_67..
Python
# Python implementation of the approach # Function that returns the index # which will be the last to become # zero after performing given operation def findIndex(a, n, k): # Initialize the result index = -1 max_ceil = -10**9 for i in range(n): # Finding the ceil value # of each index a[i] = (a[i] + k - 1) // k for i in range(n): # Finding the index with # maximum ceil value if (a[i] >= max_ceil): max_ceil = a[i] index = i return index # Driver code arr = [31, 12, 25, 27, 32, 19] K = 5 N = len(arr) print(findIndex(arr, N, K)) # This code is contributed by mohit kumar 29
C#
// C# implementation of the approach using System; class GFG { // Function that returns the index // which will be the last to become // zero after performing given operation static int findIndex(int[] a, int n, int k) { // Initialize the result int index = -1, max_ceil = int.MinValue; for (int i = 0; i < n; i++) { // Finding the ceil value // of each index a[i] = (a[i] + k - 1) / k; } for (int i = 0; i < n; i++) { // Finding the index with // maximum ceil value if (a[i] >= max_ceil) { max_ceil = a[i]; index = i; } } return index; } // Driver code static public void Main () { int []arr = { 31, 12, 25, 27, 32, 19 }; int K = 5; int N = arr.Length ; Console.WriteLine(findIndex(arr, N, K)); } } // This code is contributed by AnkitRai01
Javascript
<script> // javascript implementation of the approach // Function that returns the index // which will be the last to become // zero after performing given operation function findIndex(a, n, k) { // Initialize the result var index = -1, max_ceil = Number.MIN_VALUE; for (i = 0; i < n; i++) { // Finding the ceil value // of each index a[i] = (a[i] + k - 1) / k; } for (i = 0; i < n; i++) { // Finding the index with // maximum ceil value if (a[i] >= max_ceil) { max_ceil = a[i]; index = i; } } return index; } // Driver code var arr = [ 31, 12, 25, 27, 32, 19 ]; var K = 5; var N = arr.length ; document.write(findIndex(arr, N, K)); // This code is contributed by Amit Katiyar </script>
4
Complejidad de tiempo: O(N), ya que estamos usando un bucle para atravesar N veces, por lo que nos costará O(N) tiempo
Espacio auxiliar: O(1), ya que no estamos usando ningún espacio adicional.
Publicación traducida automáticamente
Artículo escrito por rupesh_rao y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA