Hacer que la array no sea decreciente con la operación dada

Dada una array arr[] de tamaño N , la tarea es verificar si es posible hacer que la array no sea decreciente aplicando la operación dada como máximo una vez en cada elemento de la array. En una sola operación, se puede disminuir el elemento en uno, es decir, arr[i] = arr[i] – 1 .
Ejemplos: 
 

Entrada: arr[] = {1, 2, 1, 2, 3} 
Salida: Sí 
Aplicar la operación dada en el 2º y el 4º elemento
Ahora, la array se convierte en {1, 1, 1, 1, 3}
Entrada: arr[] = {1, 3, 1} 
Salida: No 
 

Enfoque: Procese los elementos en orden creciente y disminuya el elemento actual siempre que se pueda sin hacerlo menor que el elemento anterior. (Por lo tanto, el primer elemento siempre debe disminuirse). Si en algún momento el elemento actual es menor que el elemento anterior, no importa qué operación se realice, la respuesta es «No».
La razón por la que esta estrategia es óptima es que disminuir un número hará que sea más fácil (o al menos fácil) tratar con el siguiente elemento de la lista, ya que cualquier valor que podría haber tomado el siguiente elemento seguirá funcionando cuando el número anterior sea más bajo. y, de hecho, disminuir el número anterior amplía el rango de valores posibles para el siguiente conjunto.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to make array non-decreasing
bool isPossible(int a[], int n)
{
    // Take the first element
    int cur = a[0];
 
    // Perform the operation
    cur--;
 
    // Traverse the array
    for (int i = 1; i < n; i++) {
 
        // Next element
        int nxt = a[i];
 
        // If next element is greater than the
        // current element then decrease
        // it to increase the possibilities
        if (nxt > cur)
            nxt--;
 
        // It is not possible to make the
        // array non-decreasing with
        // the given operation
        else if (nxt < cur)
            return false;
 
        // Next element is now the current
        cur = nxt;
    }
 
    // The array can be made non-decreasing
    // with the given operation
    return true;
}
 
// Driver code
int main()
{
    int a[] = { 1, 2, 1, 2, 3 };
    int n = sizeof(a) / sizeof(a[0]);
 
    if (isPossible(a, n))
        cout << "Yes";
    else
        cout << "No";
 
    return 0;
}

Java

// Java implementation of the approach
class GFG
{
 
// Function to make array non-decreasing
static boolean isPossible(int a[], int n)
{
    // Take the first element
    int cur = a[0];
 
    // Perform the operation
    cur--;
 
    // Traverse the array
    for (int i = 1; i < n; i++)
    {
 
        // Next element
        int nxt = a[i];
 
        // If next element is greater than the
        // current element then decrease
        // it to increase the possibilities
        if (nxt > cur)
            nxt--;
 
        // It is not possible to make the
        // array non-decreasing with
        // the given operation
        else if (nxt < cur)
            return false;
 
        // Next element is now the current
        cur = nxt;
    }
 
    // The array can be made non-decreasing
    // with the given operation
    return true;
}
 
// Driver code
public static void main(String []args)
{
    int a[] = { 1, 2, 1, 2, 3 };
    int n = a.length;
 
    if (isPossible(a, n))
        System.out.printf("Yes");
    else
        System.out.printf("No");
}
}
 
// This code is contributed by 29AjayKumar

Python3

# Python3 implementation of the approach
 
# Function to make array non-decreasing
def isPossible(a, n) :
 
    # Take the first element
    cur = a[0];
 
    # Perform the operation
    cur -= 1;
 
    # Traverse the array
    for i in range(1, n) :
 
        # Next element
        nxt = a[i];
 
        # If next element is greater than the
        # current element then decrease
        # it to increase the possibilities
        if (nxt > cur) :
            nxt -= 1;
 
        # It is not possible to make the
        # array non-decreasing with
        # the given operation
        elif (nxt < cur) :
            return False;
 
        # Next element is now the current
        cur = nxt;
 
    # The array can be made non-decreasing
    # with the given operation
    return True;
 
# Driver code
if __name__ == "__main__" :
 
    a = [ 1, 2, 1, 2, 3 ];
    n = len(a);
 
    if (isPossible(a, n)) :
        print("Yes");
    else :
        print("No");
 
# This code is contributed by AnkitRai01

C#

// C# implementation of the approach
using System;
     
class GFG
{
 
// Function to make array non-decreasing
static Boolean isPossible(int []a, int n)
{
    // Take the first element
    int cur = a[0];
 
    // Perform the operation
    cur--;
 
    // Traverse the array
    for (int i = 1; i < n; i++)
    {
 
        // Next element
        int nxt = a[i];
 
        // If next element is greater than the
        // current element then decrease
        // it to increase the possibilities
        if (nxt > cur)
            nxt--;
 
        // It is not possible to make the
        // array non-decreasing with
        // the given operation
        else if (nxt < cur)
            return false;
 
        // Next element is now the current
        cur = nxt;
    }
 
    // The array can be made non-decreasing
    // with the given operation
    return true;
}
 
// Driver code
public static void Main(String []args)
{
    int []a = { 1, 2, 1, 2, 3 };
    int n = a.Length;
 
    if (isPossible(a, n))
        Console.WriteLine("Yes");
    else
        Console.WriteLine("No");
}
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
// JavaScript implementation of the approach
 
// Function to make array non-decreasing
function isPossible(a, n)
{
     
    // Take the first element
    var cur = a[0];
 
    // Perform the operation
    cur--;
 
    // Traverse the array
    for(var i = 1; i < n; i++)
    {
 
        // Next element
        var nxt = a[i];
 
        // If next element is greater than the
        // current element then decrease
        // it to increase the possibilities
        if (nxt > cur)
            nxt--;
 
        // It is not possible to make the
        // array non-decreasing with
        // the given operation
        else if (nxt < cur)
            return false;
 
        // Next element is now the current
        cur = nxt;
    }
 
    // The array can be made non-decreasing
    // with the given operation
    return true;
}
 
// Driver Code
var a = [ 1, 2, 1, 2, 3 ];
var n = a.length;
 
if (isPossible(a, n))
    document.write("Yes");
else
    document.write("No");
 
// This code is contributed by Khushboogoyal499
 
</script>
Producción: 

Yes

 

Complejidad de tiempo: O(n)

Espacio Auxiliar: O(1)

Publicación traducida automáticamente

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