Leetcode977. 有序数组的平方(C++思路与代码)

给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]

思路:
一,最简单的方法每个元素平方后排序。

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

二,双指针,首先定一个大小与A相同的vector,里面放结果。还是定义两个指针i,j。分别从头和尾开始。如果A[i]*A[i]

class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        int k = A.size() - 1;
        vector<int> result(A.size(), 0);
        for (int i = 0, j = A.size() - 1; i <= j;) { // 注意这里要i <= j,因为最后要处理两个元素
            if (A[i] * A[i] < A[j] * A[j])  {
                result[k--] = A[j] * A[j];
                j--;
            }
            else {
                result[k--] = A[i] * A[i];
                i++;
            }
        }
        return result;
    }
};

你可能感兴趣的:(c++,leetcode,数据结构,算法)