給定一個按非遞減順序排序的整數數組 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++
class Solution { public: vector<int> sortedSquares(vector<int>& A) { int len = A.size(); vector<int> ret(len); int i = 0; int j = len - 1; if (len == 0) return {}; if (i == j) return {A[0] * A[0]}; while(i != j) { if (abs(A[i]) > abs(A[j])) { ret[len-1] = A[i] * A[i]; i++; } else { ret[len-1] = A[j] * A[j]; j--; } if (i == j) ret[0] = A[i] * A[i]; len--; } return ret; } };
Python
class Solution: def sortedSquares(self, A: List[int]) -> List[int]: ret = [] i = 0 j = len(A) - 1 while i<=j: if -A[i] > A[j]: ret.append(A[i]*A[i]) i = i + 1 else: ret.append(A[j]*A[j]) j = j - 1 return ret