Leetcode-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 已按非递减顺序排序。
思路:
双指针法,一个从前往后,一个从后向前,不断判断所指数的绝对值的大小。有序把平方后的结果存入数组。
C++ code:
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
int n = A.size() - 1;
vector<int> res(n + 1);
int left = 0;
int right = n;
while(right >= left){
if(abs(A[right]) > abs(A[left])){
res[n--] = A[right] * A[right];
right--;
}else{
res[n--] = A[left] * A[left];
left++;
}
}
return res;
}
};
python code:
class Solution:
def sortedSquares(self, A: List[int]) -> List[int]:
res = copy.deepcopy(A)
n = len(A) - 1
left = 0
right = n
while right >= left:
if abs(A[right]) > abs(A[left]):
res[n] = A[right] * A[right]
right -= 1
else:
res[n] = A[left] * A[left]
left += 1
n -= 1
return res