Skip to content
Related Articles

Related Articles

Improve Article

Minimum number of changes such that elements are first Negative and then Positive

  • Difficulty Level : Medium
  • Last Updated : 19 May, 2021

Given an array arr[] of size N. The task is to find the minimum number of changes required to convert the array such that for any index 0 ≤ k < N, the elements in the array upto k-th index will be less than zero and after k-th index will be greater than zero.
That is: 
 

arr[0] < 0, arr[1] < 0, …, arr[k] < 0 and arr[k + 1] > 0, arr[k + 2] > 0, …, arr[N – 1] > 0
 

Examples: 
 

Input: arr[] = { -1, 1, 2, -1} 
Output:
Replace last -1 with any positive integer.
Input: arr[] = { -1, 0, 1, 2 } 
Output:
Replace 0 with any negative integer. 
 

 



Approach: First, find for each valid k, the number of non-negative integers to the left of it and the number of non-positive integers to the right. Now, run a loop for each valid k (0 ≤ k <n) and find the sum of the number of non-negative integers left to it and number of non-positive integers right to it, and the minimum of these values for every k is our required answer.
Below is the implementation of the above approach: 
 

C++




// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the count
// of minimum operations required
int Minimum_Operations(int a[], int n)
{
 
    // To store the count of negative integers
    // on the right of the current index (inclusive)
    int np[n + 1];
    np[n] = 0;
 
    // Find the count of negative integers
    // on the right
    for (int i = n - 1; i >= 0; i--) {
        np[i] = np[i + 1];
 
        // If current element is negative
        if (a[i] <= 0)
            np[i]++;
    }
 
    // To store the count of positive elements
    int pos = 0;
    int ans = n;
 
    // Find the positive integers
    // on the left
    for (int i = 0; i < n - 1; i++) {
 
        // If current element is positive
        if (a[i] >= 0)
            pos++;
 
        // Update the answer
        ans = min(ans, pos + np[i + 1]);
    }
 
    // Return the required answer
    return ans;
}
 
// Driver code
int main()
{
    int a[] = { -1, 0, 1, 2 };
    int n = sizeof(a) / sizeof(a[0]);
    cout << Minimum_Operations(a, n);
 
    return 0;
}

Java




// Java implementation of the approach
class GFG
{
     
// Function to return the count
// of minimum operations required
static int Minimum_Operations(int []a, int n)
{
 
    // To store the count of negative integers
    // on the right of the current index (inclusive)
    int[] np = new int[n + 1];
    np[n] = 0;
 
    // Find the count of negative integers
    // on the right
    for (int i = n - 1; i >= 0; i--)
    {
        np[i] = np[i + 1];
 
        // If current element is negative
        if (a[i] <= 0)
            np[i]++;
    }
 
    // To store the count of positive elements
    int pos = 0;
    int ans = n;
 
    // Find the positive integers
    // on the left
    for (int i = 0; i < n - 1; i++)
    {
 
        // If current element is positive
        if (a[i] >= 0)
            pos++;
 
        // Update the answer
        ans = Math.min(ans, pos + np[i + 1]);
    }
 
    // Return the required answer
    return ans;
}
 
// Driver code
public static void main(String args[])
{
    int []a = { -1, 0, 1, 2 };
    int n = a.length;
    System.out.print(Minimum_Operations(a, n));
}
}
 
// This code is contributed by Akanksha Rai

Python3




# Python3 implementation of the approach
 
# Function to return the count
# of minimum operations required
def Minimum_Operations(a, n):
 
    # To store the count of negative integers
    # on the right of the current index (inclusive)
    np = [0 for i in range(n + 1)]
 
    # Find the count of negative integers
    # on the right
    for i in range(n - 1, -1, -1):
        np[i] = np[i + 1]
 
        # If current element is negative
        if (a[i] <= 0):
            np[i] += 1
 
    # To store the count of positive elements
    pos = 0
    ans = n
 
    # Find the positive integers
    # on the left
    for i in range(n - 1):
 
        # If current element is positive
        if (a[i] >= 0):
            pos += 1
 
        # Update the answer
        ans = min(ans, pos + np[i + 1])
 
    # Return the required answer
    return ans
 
# Driver code
a = [-1, 0, 1, 2]
n = len(a)
print(Minimum_Operations(a, n))
 
# This code is contributed by mohit kumar

C#




// C# implementation of the approach
using System;
 
class GFG
{
     
// Function to return the count
// of minimum operations required
static int Minimum_Operations(int []a, int n)
{
 
    // To store the count of negative integers
    // on the right of the current index (inclusive)
    int[] np = new int[n + 1];
    np[n] = 0;
 
    // Find the count of negative integers
    // on the right
    for (int i = n - 1; i >= 0; i--)
    {
        np[i] = np[i + 1];
 
        // If current element is negative
        if (a[i] <= 0)
            np[i]++;
    }
 
    // To store the count of positive elements
    int pos = 0;
    int ans = n;
 
    // Find the positive integers
    // on the left
    for (int i = 0; i < n - 1; i++)
    {
 
        // If current element is positive
        if (a[i] >= 0)
            pos++;
 
        // Update the answer
        ans = Math.Min(ans, pos + np[i + 1]);
    }
 
    // Return the required answer
    return ans;
}
 
// Driver code
static void Main()
{
    int []a = { -1, 0, 1, 2 };
    int n = a.Length;
    Console.WriteLine(Minimum_Operations(a, n));
}
}
 
// This code is contributed by mits

PHP




<?php
// PHP implementation of the approach
 
// Function to return the count
// of minimum operations required
function Minimum_Operations($a, $n)
{
 
    // To store the count of negative
    // integers on the right of the
    // current index (inclusive)
    $np = array();
    $np[$n] = 0;
 
    // Find the count of negative
    // integers on the right
    for ($i = $n - 1; $i >= 0; $i--)
    {
        $np[$i] = $np[$i + 1];
 
        // If current element is negative
        if ($a[$i] <= 0)
            $np[$i]++;
    }
 
    // To store the count of positive elements
    $pos = 0;
    $ans = $n;
 
    // Find the positive integers
    // on the left
    for ($i = 0; $i < $n - 1; $i++)
    {
 
        // If current element is positive
        if ($a[$i] >= 0)
            $pos++;
 
        // Update the answer
        $ans = min($ans, $pos + $np[$i + 1]);
    }
 
    // Return the required answer
    return $ans;
}
 
// Driver code
$a = array( -1, 0, 1, 2 );
$n = count($a) ;
 
echo Minimum_Operations($a, $n);
 
// This code is contributed by Ryuga
?>

Javascript




<script>
 
// JavaScript implementation of the approach
 
// Function to return the count
// of minimum operations required
function Minimum_Operations(a, n)
{
   
    // To store the count of negative letegers
    // on the right of the current index (inclusive)
    let np = Array(n+1).fill(0);
    np[n] = 0;
   
    // Find the count of negative letegers
    // on the right
    for (let i = n - 1; i >= 0; i--)
    {
        np[i] = np[i + 1];
   
        // If current element is negative
        if (a[i] <= 0)
            np[i]++;
    }
   
    // To store the count of positive elements
    let pos = 0;
    let ans = n;
   
    // Find the positive letegers
    // on the left
    for (let i = 0; i < n - 1; i++)
    {
   
        // If current element is positive
        if (a[i] >= 0)
            pos++;
   
        // Update the answer
        ans = Math.min(ans, pos + np[i + 1]);
    }
   
    // Return the required answer
    return ans;
}
       
     
// Driver Code
 
    let a = [ -1, 0, 1, 2 ];
    let n = a.length;
    document.write(Minimum_Operations(a, n));
           
</script>
Output: 
1

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :