Skip to content
geeksforgeeks
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Tutorials
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
  • Practice
    • Build your AI Agent
    • GfG 160
    • Problem of the Day
    • Practice Coding Problems
    • GfG SDE Sheet
  • Contests
    • Accenture Hackathon (Ending Soon!)
    • GfG Weekly [Rated Contest]
    • Job-A-Thon Hiring Challenge
    • All Contests and Events
  • DSA
  • Interview Questions on Array
  • Practice Array
  • MCQs on Array
  • Tutorial on Array
  • Types of Arrays
  • Array Operations
  • Subarrays, Subsequences, Subsets
  • Reverse Array
  • Static Vs Arrays
  • Array Vs Linked List
  • Array | Range Queries
  • Advantages & Disadvantages
Open In App
Next Article:
Check if Arrays can be made equal by Replacing elements with their number of Digits
Next article icon

Check if array elements can become same using one external number

Last Updated : 05 Nov, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

Given an array arr[] consisting of N integers and following are the three operations that can be performed using any external number X:

  1. Add X to an array element once.
  2. Subtract X from an array element once.
  3. Perform no operation on the array element.

The task is to check whether there exists a number X, such that if the above operations are performed with the number X, the array elements become equal. If the number exists, print “Yes” and the value of X. Otherwise, print “No”.

Examples:

Input: arr[] = {2, 3, 3, 4, 2}
Output: Yes 1
Explanation:
Consider the value of X as 1 and increment the array element arr[0](= 2) and arr[4](= 2) by 1, and decrement arr[3](= 4) by 1 modifies the array to {3, 3, 3, 3, 3}.
Therefore, print Yes with the value X as 1.

Input: arr[] = {4, 3, 2, 1}
Output: No

The given problem can be solved based on the following observations:

  • If all numbers are equal, the answer is “YES“.
  • If there are two distinct numbers in the array, the answer is “YES“, as every distinct number can be converted to another integer by either adding the difference to smaller numbers or subtracting the difference from the larger numbers.
  • If there are three distinct numbers A < B < C, then all array elements can be made equal by incrementing all the As by B – A and decrementing all the Cs by C – A only when (B – A) = (C – B) or B equals (C + A) / 2.
  • If there are more than 3 distinct numbers in the array, the answer is “NO“, because of the property of the addition.

We have already discussed a hash set based solution with O(n) time and O(n) space. In this post, a better solution with O(n) Time and O(1) Space is discussed.

Follow the steps below to solve the problem:

  • Initialize 3 variables, say, X, Y, and Z as -1 to store all the 3 distinct integers of the array arr[].
  • Traverse the given array arr[] using the variable i and perform the following steps:
    • If any of X, Y, and Z are -1 then assign arr[i] to that variable.
    • Otherwise, if none of the X, Y, and Z are equal to arr[i], then print “NO” and return.
  • If any one of X, Y, and Z is equal to -1, then print “YES“.
  • Store the smallest element in X, the next largest element in Y, and the largest element in Z.
  • Now, if Z-Y is equal to (Y – X),  then print “YES“. Otherwise, print “NO“.

Below is the implementation of the above approach:

C++
// C++ program for the above approach  #include <bits/stdc++.h> using namespace std;  // Function to find whether it is possible // to make array elements equal using // one external number void isPossMakeThemEqual(int arr[],                          int N) {      int X = -1;     int Y = -1;     int Z = -1;      // Traverse the array arr[]     for (int i = 0; i < N; i++) {          // If X is equal to -1         if (X == -1) {              // Update the value of X             X = arr[i];         }          // Otherwise, if X is not         // equal to arr[i]         else if (X != arr[i]) {              // If Y is equal to -1             if (Y == -1) {                 // Update Y                 Y = arr[i];             }              // Otherwise, if Y is not             // equal to arr[i]             else if (Y != arr[i]) {                  // If  Z is equal to -1                 if (Z == -1) {                      // Update the value                     // of Z                     Z = arr[i];                 }                  // Otherwise If Z is not                 // equal to arr[i], then                 // there are at least four                 // distinct numbers in array                 else if (Z != arr[i]) {                     cout << "NO";                     return;                 }             }         }     }      // If Y is equal to -1, then all     // the array elements are equal     if (Y == -1) {         cout << "YES 0";         return;     }      // If Z is equal to -1, then there     // are only two distinct elements     if (Z == -1) {         cout << "YES " << abs(X - Y);         return;     }      int a = X, b = Y, c = Z;      X = min(a, min(b, c));     Z = max(a, max(b, c));     Y = a + b + c - X - Z;      // If Y - X is not equal to Z - Y     if (Y - X != Z - Y) {         cout << "NO";         return;     }      // Finally print "Yes"     cout << "Yes " << (Y - X); }  // Driver Code int main() {     int arr[] = { 2, 3, 3, 4, 2 };     int N = sizeof(arr) / sizeof(arr[0]);     isPossMakeThemEqual(arr, N);      return 0; } 
Java
// Java program for the above approach import java.io.*;  class GFG {    // Function to find whether it is possible   // to make array elements equal using   // one external number   static void isPossMakeThemEqual(int arr[],                                   int N)   {      int X = -1;     int Y = -1;     int Z = -1;      // Traverse the array arr[]     for (int i = 0; i < N; i++) {        // If X is equal to -1       if (X == -1) {          // Update the value of X         X = arr[i];       }        // Otherwise, if X is not       // equal to arr[i]       else if (X != arr[i]) {          // If Y is equal to -1         if (Y == -1)          {            // Update Y           Y = arr[i];         }          // Otherwise, if Y is not         // equal to arr[i]         else if (Y != arr[i]) {            // If  Z is equal to -1           if (Z == -1) {              // Update the value             // of Z             Z = arr[i];           }            // Otherwise If Z is not           // equal to arr[i], then           // there are at least four           // distinct numbers in array           else if (Z != arr[i]) {             System.out.println("NO");             return;           }         }       }     }      // If Y is equal to -1, then all     // the array elements are equal     if (Y == -1) {       System.out.println("YES 0");       return;     }      // If Z is equal to -1, then there     // are only two distinct elements     if (Z == -1) {       System.out.println("YES "+ Math.abs(X - Y));       return;     }      int a = X, b = Y, c = Z;      X = Math.min(a, Math.min(b, c));     Z = Math.max(a, Math.max(b, c));     Y = a + b + c - X - Z;      // If Y - X is not equal to Z - Y     if (Y - X != Z - Y) {       System.out.println("NO");       return;     }      // Finally print "Yes"     System.out.println("Yes "+(Y - X));   }    // Driver Code   public static void main (String[] args)    {     int arr[] = { 2, 3, 3, 4, 2 };     int N =arr.length;     isPossMakeThemEqual(arr, N);   } }  // This code is contributed by Potta Lokesh 
Python
# Python 3 program for the above approach  # Function to find whether it is possible # to make array elements equal using # one external number def isPossMakeThemEqual(arr, N):     X = -1     Y = -1     Z = -1      # Traverse the array arr[]     for i in range(N):                # If X is equal to -1         if (X == -1):              # Update the value of X             X = arr[i]          # Otherwise, if X is not         # equal to arr[i]         elif (X != arr[i]):                        # If Y is equal to -1             if (Y == -1):                                # Update Y                 Y = arr[i]              # Otherwise, if Y is not             # equal to arr[i]             elif (Y != arr[i]):                                # If  Z is equal to -1                 if (Z == -1):                                        # Update the value                     # of Z                     Z = arr[i]                                      # Otherwise If Z is not                 # equal to arr[i], then                 # there are at least four                 # distinct numbers in array                 elif (Z != arr[i]):                     print("NO")                     return      # If Y is equal to -1, then all     # the array elements are equal     if (Y == -1):         print("YES 0")         return      # If Z is equal to -1, then there     # are only two distinct elements     if (Z == -1):         print("YES ",abs(X - Y))         return      a = X     b = Y     c = Z     X = min(a, min(b, c))     Z = max(a, max(b, c))     Y = a + b + c - X - Z      # If Y - X is not equal to Z - Y     if (Y - X != Z - Y):         print("NO")         return      # Finally print "Yes"     print("Yes ",(Y - X))  # Driver Code if __name__ == '__main__':     arr = [2, 3, 3, 4, 2]     N = len(arr)     isPossMakeThemEqual(arr, N)          # This code is contributed by bgangwar59. 
C#
// C# program for above approach using System;  class GFG{    // Function to find whether it is possible   // to make array elements equal using   // one external number   static void isPossMakeThemEqual(int[] arr,                                   int N)   {      int X = -1;     int Y = -1;     int Z = -1;      // Traverse the array arr[]     for (int i = 0; i < N; i++) {        // If X is equal to -1       if (X == -1) {          // Update the value of X         X = arr[i];       }        // Otherwise, if X is not       // equal to arr[i]       else if (X != arr[i]) {          // If Y is equal to -1         if (Y == -1)          {            // Update Y           Y = arr[i];         }          // Otherwise, if Y is not         // equal to arr[i]         else if (Y != arr[i]) {            // If  Z is equal to -1           if (Z == -1) {              // Update the value             // of Z             Z = arr[i];           }            // Otherwise If Z is not           // equal to arr[i], then           // there are at least four           // distinct numbers in array           else if (Z != arr[i]) {                 Console.Write("NO");             return;           }         }       }     }      // If Y is equal to -1, then all     // the array elements are equal     if (Y == -1) {       Console.Write("YES 0");       return;     }      // If Z is equal to -1, then there     // are only two distinct elements     if (Z == -1) {       Console.Write("YES "+ Math.Abs(X - Y));       return;     }      int a = X, b = Y, c = Z;      X = Math.Min(a, Math.Min(b, c));     Z = Math.Max(a, Math.Max(b, c));     Y = a + b + c - X - Z;      // If Y - X is not equal to Z - Y     if (Y - X != Z - Y) {       Console.Write("NO");       return;     }      // Finally print "Yes"     Console.Write("Yes "+(Y - X));   }  // Driver Code public static void Main(String[] args) {     int[] arr = { 2, 3, 3, 4, 2 };     int N =arr.Length;     isPossMakeThemEqual(arr, N); } }  // This code is contributed by mukesh07. 
JavaScript
<script>     // JavaScript Program for the above approach    // Function to find whether it is possible   // to make array elements equal using   // one external number   function isPossMakeThemEqual(arr, N)   {      let X = -1;     let Y = -1;     let Z = -1;      // Traverse the array arr[]     for (let i = 0; i < N; i++) {        // If X is equal to -1       if (X == -1) {          // Update the value of X         X = arr[i];       }        // Otherwise, if X is not       // equal to arr[i]       else if (X != arr[i]) {          // If Y is equal to -1         if (Y == -1)          {            // Update Y           Y = arr[i];         }          // Otherwise, if Y is not         // equal to arr[i]         else if (Y != arr[i]) {            // If  Z is equal to -1           if (Z == -1) {              // Update the value             // of Z             Z = arr[i];           }            // Otherwise If Z is not           // equal to arr[i], then           // there are at least four           // distinct numbers in array           else if (Z != arr[i]) {             document.write("NO");             return;           }         }       }     }      // If Y is equal to -1, then all     // the array elements are equal     if (Y == -1) {       document.write("YES 0");       return;     }      // If Z is equal to -1, then there     // are only two distinct elements     if (Z == -1) {       document.write("YES "+ Math.abs(X - Y));       return;     }      let a = X, b = Y, c = Z;      X = Math.min(a, Math.min(b, c));     Z = Math.max(a, Math.max(b, c));     Y = a + b + c - X - Z;      // If Y - X is not equal to Z - Y     if (Y - X != Z - Y) {       document.write("NO");       return;     }      // Finally print "Yes"     document.write("Yes "+(Y - X));   }      // Driver Code      let arr = [ 2, 3, 3, 4, 2 ];     let N =arr.length;     isPossMakeThemEqual(arr, N);  // This code is contributed by sanjoy_62. </script> 

Output
Yes 1

Time Complexity: O(N)
Auxiliary Space: O(1)



Next Article
Check if Arrays can be made equal by Replacing elements with their number of Digits
author
ujjwalgoel1103
Improve
Article Tags :
  • Arrays
  • Competitive Programming
  • DSA
  • Mathematical
  • Sorting
  • array-rearrange
Practice Tags :
  • Arrays
  • Mathematical
  • Sorting

Similar Reads

  • Check if Array elements can be made equal by adding unit digit to the number
    Given an array arr[] of N integers, the task is to check whether it is possible to make all the array elements identical by applying the following option any number of times: Choose any number and add its unit digit to it. Examples: Input: arr[] = {1, 2, 4, 8, 24}Output: PossibleExplanation: For 1:
    7 min read
  • Check if Array Elemnts can be Made Equal with Given Operations
    Given an array arr[] consisting of N integers and following are the three operations that can be performed using any external number X. Add X to an array element once.Subtract X from an array element once.Perform no operation on the array element.Note : Only one operation can be performed on a numbe
    6 min read
  • Check if Arrays can be made equal by Replacing elements with their number of Digits
    Given two arrays A[] and B[] of length N, the task is to check if both arrays can be made equal by performing the following operation at most K times: Choose any index i and either change Ai to the number of digits Ai have or change Bi to the number of digits Bi have. Examples: Input: N = 4, K = 1,
    10 min read
  • Find Number of Unique Elements in an Array After each Query
    Given 2d array A[][1] of size N and array Q[][2] of size M representing M queries of type {a, b}. The task for this problem is in each query move all elements from A[a] to A[b] and print the number of unique elements in A[b]. Constraints: 1 <= N, Q <= 1051 <= A[i] <= 1091 <= a, b <
    10 min read
  • Making elements of two arrays same with minimum increment/decrement
    Given two arrays of same size, we need to convert the first array into another with minimum operations. In an operation, we can either increment or decrement an element by one. Note that orders of appearance of elements do not need to be same. Here to convert one number into another we can add or su
    6 min read
  • Check if an array can be formed by merging 2 non-empty permutations
    Given an array arr[] of length N, the task is to check if it can be formed by merging two permutations of the same or different lengths. Print YES if such merging is possible. Otherwise, print NO. Permutations of length 3 are {1, 2, 3}, {2, 3, 1}, {1, 3, 2}, {3, 1, 2}, {3, 2, 1}, {2, 1, 3}. Examples
    11 min read
  • Check whether it is possible to make both arrays equal by modifying a single element
    Given two sequences of integers 'A' and 'B', and an integer 'k'. The task is to check if we can make both sequences equal by modifying any one element from the sequence A in the following way: We can add any number from the range [-k, k] to any element of A. This operation must only be performed onc
    11 min read
  • Check if two arrays can be made equal by reversing any subarray once
    Given two arrays A[] and B[] of equal size N, the task is to check whether A[] can be made equal to B[] by reversing any sub-array of A only once. Examples: Input: A[] = {1, 3, 2, 4} B[] = {1, 2, 3, 4} Output: Yes Explanation: The sub-array {3, 2} can be reversed to {2, 3}, which makes A equal to B.
    8 min read
  • Equalize an array using array elements only
    Given an array of integers, the task is to count minimum number of operations to equalize the array (make all array elements same). And return -1 if it is not possible to equalize. To equalize an array, we need to move values from higher numbers to smaller numbers. Number of operations is equal to n
    6 min read
  • Check if all the digits of the given number are same
    Given a positive integer N, the task is to check whether all the digits of the given integer N are the same or not. If found to be true, then print Yes. Otherwise, print No. Examples: Input: N = 222Output: Yes Input: N = 232Output: No Recommended: Please try your approach on {IDE} first, before movi
    11 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences