解题思路:
方法一:先平方再快排
方法二:双指针
因为可能有负数,所以对于一个数组 [ -5 , -3 , 0 , 2 , 4 ] 可以从两边向内靠拢,最大值一定出现在两端
设置指针 i 和指针 j 分别从左右两边靠拢
因为要从小到大排序,所以用 k 倒着赋值即可
class Solution {public int[] sortedSquares(int[] nums) {int i = 0;int j = nums.length - 1;int k = nums.length - 1;int[] res = new int[nums.length];while (i <= j) {if (nums[i] * nums[i] < nums[j] * nums[j]) {res[k] = nums[j] * nums[j];k--;j--;} else {res[k] = nums[i] * nums[i];k--;i++;}}return res;}
}