977.有序数组的平方

46 阅读1分钟

双层循环

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

双指针法

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int size = nums.size();
        // 初始化大小为size,否则报错
        vector<int> result(size);
        int i = 0;
        int j = size - 1;
        int pos = size - 1 ;
        while(i <= j) {
            if(nums[i] * nums[i] < nums[j] * nums[j]) {
                // vector可直接按照下标进行处理,也可使用push_back方法
                result[pos] = nums[j] * nums[j];
                pos--;
                j--;
            }
            else {
                result[pos] = nums[i] * nums[i];
                pos--;
                i++;
            }
        }
        return result;
    }
};

双指针法:数组平方之后的最大数只可能出现在两端。采用双指针分别记录数组头,数组尾 创建一个结果数组保存结果vector result(size),注意这里需要初始化大小 将pos直接指向数组尾部,将原数组较大值直接放在result数组尾部,同时pos--