class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int>ans(nums.size());
int first = 0, second = nums.size() - 1;
for(int ind = nums.size() - 1; ind >= 0; ind--) {
if(abs(nums[first]) < nums[second])
ans[ind] = nums[second] * nums[second--];
else ans[ind] = nums[first] * nums[first++];
}
return ans;
}
}
//2nd approch
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int>ans;
int first = 0,second = 0;
while(first<nums.size() && nums[first]<0 ) {
first++;
}
second = first;
first -= 1;
while(first>=0 && second<nums.size()) {
if(abs(nums[first] * nums[first]) < (nums[second] * nums[second])) {
ans.push_back(nums[first] * nums[first]);
first--;
}
else {
ans.push_back(nums[second] * nums[second]);
second++;
}
}
while(first>=0) {
ans.push_back(nums[first] * nums[first]);
first--;
}
while(second<nums.size()) {
ans.push_back(nums[second] * nums[second]);
second++;
}
return ans;
}
};