Sort array after converting to squares

class Solution {
    public int[] sortedSquares(int[] arr) {
        for(int i = 0; i < arr.length; i++){
            for(int j=i+1;j<arr.length;j++){
                arr[i]=arr[i]*arr[i];
                arr[j]=arr[j]*arr[j];
                if(arr[j]<arr[i]){
                    int temp=0;
                    temp=arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                    
                    
                }
            }
        }
        return arr;
}
}

can you tell me where am going wrong.. for input [-4,-1,0,3,10] output should be [0,1,9,16,100] , My current output is [0,1,43046721,0,1874919424] .. I don’t want to use Array.sort() . Wanted to write own code.. can you help me in fixing this and where am going wrong. Thanks in advance

>Solution :

Your sort loop is functional but you are squaring each entry 4 times in a cumulative manner. One approach is to first square all the elements and then sort.

From your results you can see evidence:

(((3^2)^2)^2)^2 = 43046721

The second 0 is interesting:

(((-4^2)^2)^2)^2 = 4,294,967,296

which for a 32-bit int becomes 0.

And for 10:

(((10^2)^2)^2)^2 = 10,000,000,000,000,000

rolls over to 187491924.

So your code can simply be updated by first squaring the entries and then sort:

public int[] sortedSquares(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        arr[i] = arr[i] * arr[i];
    }
    for(int i = 0; i < arr.length; i++){
        for(int j=i+1;j<arr.length;j++){
            if(arr[j]<arr[i]){
                int temp=0;
                temp=arr[i];
                arr[i]=arr[j];
                arr[j]=temp;
            }
        }
    }
    return arr;
}    

Leave a Reply