Encuentre el índice que es el último en reducirse a cero después de realizar una operación determinada

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

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>
Producción: 

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

Deja una respuesta

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