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.
Input: [-4,-1,0,3,10] Output: [0,1,9,16,100]
Input: [-7,-3,2,3,11] Output: [4,9,9,49,121]
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A
is sorted in non-decreasing order.
impl Solution {
pub fn sorted_squares(a: Vec<i32>) -> Vec<i32> {
let mut squares: Vec<i32> = a.iter().map(|&x| x * x).collect();
squares.sort_unstable();
squares
}
}
impl Solution {
pub fn sorted_squares(a: Vec<i32>) -> Vec<i32> {
let mut ret = Vec::new();
let mut p = a.binary_search(&0).unwrap_or_else(|x| x);
let mut n = p;
while n > 0 || p < a.len() {
if n == 0 || (p < a.len() && a[p] < -a[n - 1]) {
ret.push(a[p] * a[p]);
p += 1;
} else {
ret.push(a[n - 1] * a[n - 1]);
n -= 1;
}
}
ret
}
}