Find the nearest odd and even perfect squares of odd and even array elements respectively

Last Updated : 17 Sep, 2022

Given an array arr[ ] of size N, the task for each array element is to print the nearest perfect square having same parity.

Examples:

Input: arr[ ] = {6, 3, 2, 15}
Output: 4 1 4 9
Explanation:
The nearest even perfect square of arr[0] (= 6) is 4.
The nearest odd perfect square of arr[1] (= 3) is 1.
The nearest even perfect square of arr[2] (= 2) is 4
The nearest odd perfect square of arr[3] (= 15) is 9.

Input: arr[ ] = {31, 18, 64}
Output: 25 16 64

Approach: Follow the steps below to solve the problem:

Below is the implementation of the above approach:

C++

 // C++ program to implement // the above approach #include using namespace std;   // Function to find the nearest even and odd // perfect squares for even and odd array elements void nearestPerfectSquare(int arr[], int N) {       // Traverse the array     for (int i = 0; i < N; i++) {           // Calculate square root of         // current array element         int sr = sqrt(arr[i]);           // If both are of same parity         if ((sr & 1) == (arr[i] & 1))             cout << sr * sr << " ";         // Otherwise         else {             sr++;             cout << sr * sr << " ";         }     } }   // Driver Code int main() {     int arr[] = { 6, 3, 2, 15 };     int N = sizeof(arr) / sizeof(arr[0]);     nearestPerfectSquare(arr, N);     return 0; }

Java

 // Java program to implement // the above approach import java.util.*;   class GFG {   // Function to find the nearest even and odd // perfect squares for even and odd array elements static void nearestPerfectSquare(int arr[], int N) {       // Traverse the array     for (int i = 0; i < N; i++) {           // Calculate square root of         // current array element         int sr = (int)Math.sqrt(arr[i]);           // If both are of same parity         if ((sr & 1) == (arr[i] & 1))             System.out.print((sr * sr) + " ");         // Otherwise         else {             sr++;             System.out.print((sr * sr) + " ");         }     } }   // Driver Code public static void main(String[] args) {     int arr[] = { 6, 3, 2, 15 };     int N = arr.length;     nearestPerfectSquare(arr, N); } }   // This code is contributed by souravghosh0416.

Python3

 # Python3 program for the above approach import math   # Function to find the nearest even and odd # perfect squares for even and odd array elements def nearestPerfectSquare(arr, N) :       # Traverse the array     for i in range(N):           # Calculate square root of         # current array element         sr = int(math.sqrt(arr[i]))           # If both are of same parity         if ((sr & 1) == (arr[i] & 1)) :             print(sr * sr, end = " ")         # Otherwise         else :             sr += 1             print(sr * sr, end = " ")           # Driver Code arr = [ 6, 3, 2, 15 ] N = len(arr) nearestPerfectSquare(arr, N)   # This code is contributed by sanjoy_62.

C#

 // C# program for the above approach using System;   class GFG{     // Function to find the nearest even and odd   // perfect squares for even and odd array elements   static void nearestPerfectSquare(int[] arr, int N)   {       // Traverse the array     for (int i = 0; i < N; i++) {         // Calculate square root of       // current array element       int sr = (int)Math.Sqrt(arr[i]);         // If both are of same parity       if ((sr & 1) == (arr[i] & 1))         Console.Write((sr * sr) + " ");         // Otherwise       else {         sr++;         Console.Write((sr * sr) + " ");       }     }   }       // Driver Code   static public void Main()   {     int[] arr = { 6, 3, 2, 15 };     int N = arr.Length;     nearestPerfectSquare(arr, N);   } }   // This code is contributed by splevel62.

Javascript



Output:

4 1 4 9

Time Complexity: O(N*logN) where N is size of given array
Auxiliary Space: O(1)