[C++ 99.65% Faster] Squares of a Sorted Array
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int l, r=0;
        std::vector<int> sortedSq;
        sortedSq.reserve(nums.size());
        
        while( r < nums.size() && nums[r] < 0) // find first positive number
            ++r;
        
        l = r-1;
        
        while(l > -1 && r < nums.size()) // while in index range
        {
            if(-1*nums[l] < nums[r]) // multiplied by -1 since nums[l] shall always be negative
            {
                sortedSq.push_back(nums[l] * nums[l]);
                l--;
            }
            else
            {
                sortedSq.push_back(nums[r] * nums[r]);
                r++;
            }
        }
        
		// now copy over the remaining numbers 
		// for example, say l reached < 0 but r still had some numbers remaining and vice-versa
		// only one of the following for loop will be executed based on reason for while loop exit
        for(; l > -1; l--)
            sortedSq.push_back(nums[l] * nums[l]);
        for(; r < nums.size(); r++)
            sortedSq.push_back(nums[r] * nums[r]);
        return sortedSq;
    }
};
Comments (0)