Given an array of integers A
sorted in non-decreasing order, return an array of the squares of each number, also in sorted non-decreasing order.
Example 1:
Input: [-4,-1,0,3,10] Output: [0,1,9,16,100]
Example 2:
Input: [-7,-3,2,3,11] Output: [4,9,9,49,121]
Note:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A
is sorted in non-decreasing order.
Solution: Two pointers + Merge two sorted arrays
Time complexity: O(n)
Space complexity: O(1)
c++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// Author: Huahua, running time: 120 ms class Solution { public: vector<int> sortedSquares(vector<int>& A) { vector<int> ans(A.size()); auto e = prev(end(A)); auto s = begin(A); auto it = end(ans); while (--it >= begin(ans)) { if (e > s && abs(*e) > abs(*s)) *it = pow(*e--, 2); else *it = pow(*s++, 2); } return ans; } }; |