力扣题解-977. 有序数组的平方

题目:977. 有序数组的平方

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

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

示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]

提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A 已按非递减顺序排序。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

法1:直接平方,然后排序;这样没有利用数组的非递减顺序排序特性。

法2:分析可知,数组经平方后其数值就像一个哑铃,数组中的数中间小,两端大。

因此,可以利用双指针方法,从数组的两端向中间遍历,得到的数值逆序存放即可。

代码

class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        int start = 0;
        int end = A.size() - 1;
        
        vector<int> ans(end + 1);
        int pos = end;

        while (start <= end) {
            int startSq = A[start] * A[start];
            int endSeq = A[end] * A[end];
            if (startSq > endSeq) {
                ans[pos] = startSq;
                start ++;
            } else {
                ans[pos] = endSeq;
                end --;
            }
            pos--;
        }
        return ans;
    }
};

你可能感兴趣的:(LeetCode,leetcode,双指针)