Minimum number of points to be removed to get remaining points on one side of axis

22 Jun, 2022
We are given n points in a Cartesian plane. Our task is to find the minimum number of points that should be removed in order to get the remaining points on one side of any axis. 
Examples : 
Input : 4
        1 1
        2 2
       -1 -1
       -2 2
Output : 1
Explanation :
If we remove (-1, -1) then all the remaining 
points are above x-axis. Thus the answer is 1.

Input : 3
        1 10
        2 3
        4 11
Output : 0
Explanation :
All points are already above X-axis. Hence the
answer is 0.  
Approach : This problem is a simple example of a constructive brute force algorithm on Geometry. The solution can be approached simply by finding the number of points on all sides of the X-axis and Y-axis. The minimum of this will be the answer. 
C++
Java
Python3
C#
Javascript
// CPP program to find minimum points to be moved// so that all points are on same side.#include <bits/stdc++.h>using namespace std;typedef long long ll; // Structure to store the coordinates of a point.struct Point{    int x, y;}; // Function to find the minimum number of pointsint findmin(Point p[], int n){    int a = 0, b = 0, c = 0, d = 0;    for (int i = 0; i < n; i++)    {        // Number of points on the left of Y-axis.        if (p[i].x <= 0)                    a++;         // Number of points on the right of Y-axis.        else if (p[i].x >= 0)            b++;         // Number of points above X-axis.        if (p[i].y >= 0)            c++;         // Number of points below X-axis.        else if (p[i].y <= 0)            d++;    }     return min({a, b, c, d});} // Driver Functionint main(){    Point p[] = { {1, 1}, {2, 2}, {-1, -1}, {-2, 2} };    int n = sizeof(p)/sizeof(p[0]);    cout << findmin(p, n);    return 0;}
// Java program to find minimum points to be moved// so that all points are on same side.import java.util.*; class GFG{ // Structure to store the coordinates of a point.static class Point{    int x, y;     public Point(int x, int y)    {        this.x = x;        this.y = y;    }}; // Function to find the minimum number of pointsstatic int findmin(Point p[], int n){    int a = 0, b = 0, c = 0, d = 0;    for (int i = 0; i < n; i++)    {        // Number of points on the left of Y-axis.        if (p[i].x <= 0)                a++;         // Number of points on the right of Y-axis.        else if (p[i].x >= 0)            b++;         // Number of points above X-axis.        if (p[i].y >= 0)            c++;         // Number of points below X-axis.        else if (p[i].y <= 0)            d++;    }    return Math.min(Math.min(a, b),                    Math.min(c, d));} // Driver Codepublic static void main(String[] args){    Point p[] = {new Point(1, 1), new Point(2, 2),                 new Point(-1, -1), new Point(-2, 2)};    int n = p.length;    System.out.println(findmin(p, n));}} // This code is contributed by PrinciRaj1992
# Python3 program to find minimum points to be# moved so that all points are on same side. # Function to find the minimum number# of pointsdef findmin(p, n):     a, b, c, d = 0, 0, 0, 0    for i in range(n):                 # Number of points on the left        # of Y-axis.        if (p[i][0] <= 0):                a += 1         # Number of points on the right        # of Y-axis.        elif (p[i][0] >= 0):            b += 1         # Number of points above X-axis.        if (p[i][1] >= 0):            c += 1         # Number of points below X-axis.        elif (p[i][1] <= 0):            d += 1     return min([a, b, c, d]) # Driver Codep = [ [1, 1], [2, 2], [-1, -1], [-2, 2] ]n = len(p)print(findmin(p, n))     # This code is contributed by Mohit Kumar
// C# program to find minimum points to be moved// so that all points are on same side.using System;     class GFG{ // Structure to store the coordinates of a point.public class Point{    public int x, y;     public Point(int x, int y)    {        this.x = x;        this.y = y;    }}; // Function to find the minimum number of pointsstatic int findmin(Point []p, int n){    int a = 0, b = 0, c = 0, d = 0;    for (int i = 0; i < n; i++)    {        // Number of points on the left of Y-axis.        if (p[i].x <= 0)                a++;         // Number of points on the right of Y-axis.        else if (p[i].x >= 0)            b++;         // Number of points above X-axis.        if (p[i].y >= 0)            c++;         // Number of points below X-axis.        else if (p[i].y <= 0)            d++;    }    return Math.Min(Math.Min(a, b),                    Math.Min(c, d));} // Driver Codepublic static void Main(String[] args){    Point []p = {new Point(1, 1),                 new Point(2, 2),                 new Point(-1, -1),                 new Point(-2, 2)};    int n = p.Length;    Console.WriteLine(findmin(p, n));}}     // This code is contributed by Princi Singh
<script> // JavaScript program to find minimum points to be moved// so that all points are on same side.         // Function to find the minimum number of points    function findmin(p,n)    {        let a = 0, b = 0, c = 0, d = 0;    for (let i = 0; i < n; i++)    {        // Number of points on the left of Y-axis.        if (p[i][0] <= 0)                a++;           // Number of points on the right of Y-axis.        else if (p[i][0] >= 0)            b++;           // Number of points above X-axis.        if (p[i][1] >= 0)            c++;           // Number of points below X-axis.        else if (p[i][1] <= 0)            d++;    }    return Math.min(Math.min(a, b),                    Math.min(c, d));    }         // Driver Code    let p = [ [1, 1], [2, 2], [-1, -1], [-2, 2] ]    let n = p.length;    document.write(findmin(p, n)); // This code is contributed by unknown2108 </script>
Output:  
1
Time Complexity: O(n) Auxiliary Space: O(1)
Please suggest if someone has a better solution which is more efficient in terms of space and time.This article is contributed by Aarti_Rathi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
mohit kumar 29
princiraj1992
princi singh
unknown2108
simranarora5sos
_shinchancode
Geometric
School Programming
Searching
Searching
Geometric
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Maximum Manhattan distance between a distinct pair from N coordinates
Total area of two overlapping rectangles
Equation of circle when three points on the circle are given
Orientation of 3 ordered points
Program to find line passing through 2 Points
Python Dictionary
Reverse a string in Java
Arrays in C/C++
Introduction To PYTHON
Interfaces in Java