题目: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;
}
};
版权声明:本文为u011503666原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。