Check whether an array can be made strictly increasing by removing at most one element - GeeksforGeeks

25 Aug, 2021
Given an array arr[] consisting of N integers, the task is to check whether it is possible to make the given array strictly increasing by removing at most one element. If it is possible to make the array strictly increasing, then print “Yes”. Otherwise, print “No”.
Examples:
Input: arr[] = {1, 1, 2}Output: YesExplanation: Removing an occurrence of 1 modifies the array to {1, 2}, which is strictly increasing array.
Input: arr[] = {2, 2, 3, 4, 5, 5} Output: No
Approach: The given problem can be solved by traversing the array arr[] and count the indices satisfying the condition arr[i-1] ≥ arr[i]. Follow the steps below to solve the problem:
Initialize two variables, say count as 0 and index as -1, to store the count of elements needed to be removed and the index of the removed element respectively.
Traverse the given array over the range [1, N – 1] and if the value of arr[i – 1] is at least arr[i] increment the value of count by 1 and update the value of the index as i.
If the value of count is greater than 1, then print “No” and return.
Otherwise, check for the following conditions:If the value of count is equal to 0, then print “Yes” and return.If the index is either equal to (N – 1) or equal to 0, then print “Yes” and return.Check if removing the element at index makes the arr[index – 1] < arr[index + 1], then print “Yes” and return.Check if removing the element at index – 1 makes the arr[index – 2] < arr[index], where index – 2 >= 0, then print “Yes” and return.Check if index < 0, then print “Yes” and return.
If the value of count is equal to 0, then print “Yes” and return.
If the index is either equal to (N – 1) or equal to 0, then print “Yes” and return.
Check if removing the element at index makes the arr[index – 1] < arr[index + 1], then print “Yes” and return.
Check if removing the element at index – 1 makes the arr[index – 2] < arr[index], where index – 2 >= 0, then print “Yes” and return.
Check if index < 0, then print “Yes” and return.
After completing the above steps, if none of the above cases are satisfied, then print “No”.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ program for the above approach  #include <bits/stdc++.h>using namespace std;  // Function to find if is it possible// to make the array strictly increasing// by removing at most one elementbool check(int arr[], int n){    // Stores the count of numbers that    // are needed to be removed    int count = 0;      // Store the index of the element    // that needs to be removed    int index = -1;      // Traverse the range [1, N - 1]    for (int i = 1; i < n; i++) {          // If arr[i-1] is greater than        // or equal to arr[i]        if (arr[i - 1] >= arr[i]) {              // Increment the count by 1            count++;              // Update index            index = i;        }    }      // If count is greater than one    if (count > 1)        return false;      // If no element is removed    if (count == 0)        return true;      // If only the last or the    // first element is removed    if (index == n - 1 || index == 1)        return true;      // If a[index] is removed    if (arr[index - 1] < arr[index + 1])        return true;      // If a[index - 1] is removed    if (index - 2 >= 0 && arr[index - 2] < arr[index])        return true;              // if there is no element to compare      if(index < 0)          return true;      return false;}  // Driver Codeint main(){    int arr[] = { 1, 2, 5, 3, 5 };    int N = sizeof(arr) / sizeof(arr[0]);    if (check(arr, N))        cout << "Yes";    else        cout << "No";      return 0;}
// Java program for the above approachclass GFG{  // Function to find if is it possible// to make the array strictly increasing// by removing at most one elementpublic static boolean check(int arr[], int n){          // Stores the count of numbers that    // are needed to be removed    int count = 0;      // Store the index of the element    // that needs to be removed    int index = -1;      // Traverse the range [1, N - 1]    for(int i = 1; i < n; i++)     {                  // If arr[i-1] is greater than        // or equal to arr[i]        if (arr[i - 1] >= arr[i])        {                          // Increment the count by 1            count++;              // Update index            index = i;        }    }      // If count is greater than one    if (count > 1)        return false;      // If no element is removed    if (count == 0)        return true;      // If only the last or the    // first element is removed    if (index == n - 1 || index == 1)        return true;      // If a[index] is removed    if (arr[index - 1] < arr[index + 1])        return true;      // If a[index - 1] is removed    if (index - 2 >= 0 && arr[index - 2] < arr[index])        return true;              // if there is no element to compare      if(index < 0)          return true;      return false;}  // Driver Codepublic static void main(String args[]){    int []arr = { 1, 2, 5, 3, 5 };    int N = arr.length;          if (check(arr, N))        System.out.println("Yes");    else        System.out.println("No");}}  // This code is contributed by SoumikMondal
# Python3 program for the above approach  # Function to find if is it possible# to make the array strictly increasing# by removing at most one elementdef check(arr, n):        # Stores the count of numbers that    # are needed to be removed    count = 0      # Store the index of the element    # that needs to be removed    index = -1      # Traverse the range [1, N - 1]    for i in range(1, n):          # If arr[i-1] is greater than        # or equal to arr[i]        if (arr[i - 1] >= arr[i]):            # Increment the count by 1            count += 1              # Update index            index = i      # If count is greater than one    if (count > 1):        return False      # If no element is removed    if (count == 0):        return True      # If only the last or the    # first element is removed    if (index == n - 1 or index == 1):        return True      # If a[index] is removed    if (arr[index - 1] < arr[index + 1]):        return True      # If a[index - 1] is removed    if (arr[index - 2] < arr[index]):        return True      return False  # Driver Codeif __name__ == '__main__':    arr = [1, 2, 5, 3, 5]    N = len(arr)    if (check(arr, N)):        print("Yes")    else:        print("No")  # This code is contributed by mohitkumar 29.
// C# program for the above approachusing System;  class GFG{  // Function to find if is it possible// to make the array strictly increasing// by removing at most one elementpublic static bool check(int[] arr, int n){          // Stores the count of numbers that    // are needed to be removed    int count = 0;      // Store the index of the element    // that needs to be removed    int index = -1;      // Traverse the range [1, N - 1]    for(int i = 1; i < n; i++)    {                  // If arr[i-1] is greater than        // or equal to arr[i]        if (arr[i - 1] >= arr[i])        {                          // Increment the count by 1            count++;              // Update index            index = i;        }    }      // If count is greater than one    if (count > 1)        return false;      // If no element is removed    if (count == 0)        return true;      // If only the last or the    // first element is removed    if (index == n - 1 || index == 1)        return true;      // If a[index] is removed    if (arr[index - 1] < arr[index + 1])        return true;      // If a[index - 1] is removed    if (arr[index - 2] < arr[index])        return true;      return false;}  // Driver Codepublic static void Main(string[] args){    int[] arr = { 1, 2, 5, 3, 5 };    int N = arr.Length;      if (check(arr, N))        Console.WriteLine("Yes");    else        Console.WriteLine("No");}}  // This code is contributed by ukasp
<script>  // Javascript program for the above approach  // Function to find if is it possible// to make the array strictly increasing// by removing at most one elementfunction check(arr , n){          // Stores the count of numbers that    // are needed to be removed    var count = 0;      // Store the index of the element    // that needs to be removed    var index = -1;      // Traverse the range [1, N - 1]    for(i = 1; i < n; i++)     {                  // If arr[i-1] is greater than        // or equal to arr[i]        if (arr[i - 1] >= arr[i])        {                          // Increment the count by 1            count++;              // Update index            index = i;        }    }      // If count is greater than one    if (count > 1)        return false;      // If no element is removed    if (count == 0)        return true;      // If only the last or the    // first element is removed    if (index == n - 1 || index == 1)        return true;      // If a[index] is removed    if (arr[index - 1] < arr[index + 1])        return true;      // If a[index - 1] is removed    if (arr[index - 2] < arr[index])        return true;      return false;}  // Driver Code  var arr = [ 1, 2, 5, 3, 5 ];var N = arr.length;  if (check(arr, N))    document.write("Yes");else    document.write("No");    // This code contributed by shikhasingrajput   </script>
Yes
 
Time Complexity: O(N)Auxiliary Space: O(1)
SoumikMondal
ukasp
shikhasingrajput
mohit kumar 29
suvodeep debnath
array-rearrange
Arrays
Sorting
Arrays
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Window Sliding Technique
Trapping Rain Water
Building Heap from Array
Reversal algorithm for array rotation
Program to find sum of elements in a given array