Given an integer N, the task is to find a distinct pair of X and Y such that X + Y = N and abs(X – Y) is minimum.
Examples:
Input: N = 11
Output: 5 6
Explanation:
X = 5 and Y = 6 satisfy the given equation.
Therefore, the minimum absolute value of abs(X – Y) = 1.Input: N = 12
Output: 5 7
Naive Approach: The simplest approach to solve this problem is to generate all possible values of X and Y with a sum equal to N and print the value of X and Y which gives the minimum absolute value of abs(X – Y).
Time Complexity: O(N2)
Auxiliary Space: O(1)
Efficient Approach: The above approach can be optimized based on the following observations:
If N % 2 == 1, then pairs (N / 2) and (N / 2 + 1) have minimum absolute difference.
Otherwise, pairs (N / 2 – 1) and (N / 2 + 1) will have the minimum absolute difference.
Follow the steps below to solve the problem:
- Check if N is odd or not. If found to be true, then print the floor value of (N / 2) and (N / 2 + 1) as the required answer.
- Otherwise, print the value of (N / 2 – 1) and (N / 2 + 1).
Below is the implementation of the above approach:
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std;
// Function to find the value of X and Y // having minimum value of abs(X - Y) void findXandYwithminABSX_Y( int N)
{ // If N is an odd number
if (N % 2 == 1) {
cout << (N / 2) << " " << (N / 2 + 1);
}
// If N is an even number
else {
cout << (N / 2 - 1) << " " << (N / 2 + 1);
}
} // Driver Code int main()
{ int N = 12;
findXandYwithminABSX_Y(N);
} |
// Java program to implement // the above approach import java.util.*;
class GFG {
// Function to find the value
// of X and Y having minimum
// value of Math.abs(X - Y)
static void findXandYwithminABSX_Y( int N)
{
// If N is an odd number
if (N % 2 == 1 ) {
System.out.print((N / 2 ) + " " + (N / 2 + 1 ));
}
// If N is an even number
else {
System.out.print((N / 2 - 1 ) + " "
+ (N / 2 + 1 ));
}
}
// Driver Code
public static void main(String[] args)
{
int N = 12 ;
findXandYwithminABSX_Y(N);
}
} // This code is contributed by gauravrajput1 |
# Python3 program to implement # the above approach # Function to find the value of X and Y # having minimum value of abs(X - Y) def findXandYwithminABSX_Y(N):
# If N is an odd number
if (N % 2 = = 1 ):
print ((N / / 2 ), (N / / 2 + 1 ))
# If N is an even number
else :
print ((N / / 2 - 1 ), (N / / 2 + 1 ))
# Driver Code if __name__ = = '__main__' :
N = 12
findXandYwithminABSX_Y(N)
# This code is contributed by mohit kumar 29 |
// C# program to implement // the above approach using System;
class GFG {
// Function to find the value
// of X and Y having minimum
// value of Math.abs(X - Y)
static void findXandYwithminABSX_Y( int N)
{
// If N is an odd number
if (N % 2 == 1) {
Console.Write((N / 2) + " " + (N / 2 + 1));
}
// If N is an even number
else {
Console.Write((N / 2 - 1) + " " + (N / 2 + 1));
}
}
// Driver Code
public static void Main()
{
int N = 12;
findXandYwithminABSX_Y(N);
}
} // This code is contributed by bgangwar59 |
<?php function findXandYwithminABSX_Y( $N ){
// If N is an odd number
if ( $N % 2 == 1)
{
return ( $N / 2) . " " . ( $N / 2 + 1);
}
// If N is an even number
else
{
return ( $N /2 -1) . " " . ( $N / 2 + 1);
}
} // Driver code $N = 12;
echo (findXandYwithminABSX_Y( $N ));
?> |
<script> // JavaScript program to implement the above approach // Function to find the value of X and Y // having minimum value of abs(X - Y) function findXandYwithminABSX_Y(N)
{ // If N is an odd number
if (N % 2 == 1)
{
document.write((N / 2) + " " + (N / 2 + 1));
}
// If N is an even number
else
{
document.write((N / 2 - 1) + " " + (N / 2 + 1));
}
} // Driver Code let N = 12;
findXandYwithminABSX_Y(N);
// This code is contributed by susmitakundugoaldanga.
</script> |
5 7
Time Complexity: O(1)
Auxiliary Space: O(1)
using Brute Force in python:
Approach:
- Initialize a variable min_diff to infinity.
- Use two nested loops to generate all possible pairs of numbers (i, j) such that 1 <= i < j <= N.
- For each pair (i, j), check if i + j == N.
- If i + j == N, calculate the absolute difference between i and j using abs(i – j).
- If the absolute difference is less than the current minimum difference min_diff, update min_diff to the new absolute difference and store the pair (i, j) as the new answer.
- After checking all possible pairs, return the answer as a tuple (x, y) where x and y are the pair of numbers that add up to N with the minimum absolute difference.
def min_abs_diff_pair_brute_force(N):
min_diff = float ( 'inf' )
for i in range ( 1 , N):
for j in range (i + 1 , N + 1 ):
if abs (i - j) < min_diff and i + j = = N:
min_diff = abs (i - j)
x, y = i, j
return x, y
# Test the function with the given inputs print (min_abs_diff_pair_brute_force( 11 )) # Output: (5, 6)
print (min_abs_diff_pair_brute_force( 12 )) # Output: (5, 7)
|
(5, 6) (5, 7)
time complexity of O(N^2)
space complexity of O(1),