An algorithm to find the largest perfect square in an array. Return -1 if not found.

Example

Input: [1 ,10 ,19 ,27 ,25 ,23] [7, 33, 55, 26, 18] Output: 25 -1

A simple Solution O(nlogn).

Implementation

We should first sort the array in desc order which will take O(nlogn) time in worst case.

time in worst case. Then we should start checking for a perfect square using Math.sqrt() method, Which takes O(logx) .

method, Which takes . The first number we will get is the largest perfect square. If no perfect square is found then return -1 .

let perfectSquare = (e) => { //sort the array e.sort((a, b) => b - a); //Check the perfect square for each element for(let i = 0; i < e.length; i++){ if(e[i] > 0 && Math.sqrt(e[i]) % 1 === 0){ return e[i] } } return -1; } console.log(perfectSquare([17, 20, 27, 2, 3, 10])); console.log(perfectSquare([16, 20, 25, 2, 3, 10])); Output: -1 25

Time Complexity: O(nlogn).

Space Complexity: O(n).

Time and Space complexity

To sort the given array it would take O(nlogn). To find the sqaure root it will take O(logx) time and we have to check it for all the elements so it is O(n * logx) = O(nlogx). As we are executing them one after another O(nlogn + nlogx) = O(nlogn).

If we are using Mergesort then space complexity is O(n) and if it is Quicksort then space complexity is O(1). We can use any of them but as it is worst case we are going with O(n).

Another Solution O(nlogx).

Implementation

We should start checking for a perfect square using Math.sqrt() method for all the elements, Which takes O(nlogx) .

method for all the elements, Which takes . Then compare the maximum element between the current and the previous element and store the maximum.

let perfectSquare = (e) => { let max = -1 //Check the perfect square for each element for(let i = 0; i < e.length; i++){ if(e[i] > 0 && Math.sqrt(e[i]) % 1 === 0){ max = Math.max(max, e[i]); } } return max; } console.log(perfectSquare([17, 20, 27, 2, 3, 10])); console.log(perfectSquare([16, 20, 25, 2, 3, 10])); Output: -1 25

Time Complexity: O(nlogx).

Space Complexity: O(1).

Time and Space complexity