|
1 | 1 | struct Solution ();
|
2 | 2 | impl Solution {
|
3 | | - pub fn sorted_squares(nums: Vec<i32>) -> Vec<i32> { |
| 3 | + |
| 4 | + pub fn sorted_squares(nums: Vec<i32>) -> Vec<i32> { |
| 5 | + let n = nums.len(); |
| 6 | + |
| 7 | + if n == 0 { |
| 8 | + return vec![] |
| 9 | + } |
| 10 | + |
| 11 | + |
| 12 | + let mut p1 = 0; |
| 13 | + let mut p2 = n - 1; |
| 14 | + let mut result = vec![]; |
| 15 | + |
| 16 | + while p1 != p2 { |
| 17 | + let l = nums[p1] * nums[p1]; |
| 18 | + let r = nums[p2] * nums[p2]; |
| 19 | + |
| 20 | + if l <= r { |
| 21 | + p2 = p2 - 1; |
| 22 | + result.push(r) |
| 23 | + } |
| 24 | + |
| 25 | + if l >= r { |
| 26 | + p1 = p1 + 1; |
| 27 | + result.push(l) |
| 28 | + } |
| 29 | + } |
| 30 | + |
| 31 | + result.push(nums[p1] * nums[p1]); |
| 32 | + result.into_iter().rev().collect() |
| 33 | + } |
| 34 | + |
| 35 | + |
| 36 | + |
| 37 | + pub fn sorted_squares2(nums: Vec<i32>) -> Vec<i32> { |
4 | 38 | let n = nums.len();
|
5 | 39 |
|
6 | 40 | if n == 0 {
|
@@ -82,7 +116,7 @@ mod tests {
|
82 | 116 | use super::*;
|
83 | 117 |
|
84 | 118 | #[test] fn test_1() {
|
85 | | - // assert_eq!(Solution::sorted_squares(vec![-4,-1,0,3,10]), vec![0,1,9,16,100]); |
| 119 | + assert_eq!(Solution::sorted_squares(vec![-4,-1,0,3,10]), vec![0,1,9,16,100]); |
86 | 120 | assert_eq!(Solution::sorted_squares(vec![-3,0,2]), vec![0,4, 9])
|
87 | 121 |
|
88 | 122 | }
|
|
0 commit comments