leetcode

977.有序数组的平方

力扣链接

简洁法

class Solution {
public:
    std::vector<int> sortedSquares(std::vector<int>& nums) {
        for (int& i:nums) i = i*i;
        sort(nums.begin(), nums.end());
        return nums;
    }
};

双指针法

class Solution {
public:
    std::vector<int> sortedSquares(std::vector<int>& nums) {
        std::vector<int> res(nums.size(), 0);
        int idx = nums.size()-1;
        int left = 0, right = nums.size()-1;
        // 等价于 for(;left <= right;){...}
        while(left <= right){
            if (nums[left]*nums[left] <= nums[right]*nums[right]){
                res[idx--] = nums[right]*nums[right];
                right--;
            } else{
                res[idx--] = nums[left]*nums[left];
                left++;
            }
        }
        return res;
    }
};