难度:easy
一.暴力法
Java:
class Solution {
public int[] sortedSquares(int[] nums) {
for (int i = 0; i < nums.length; i++) {
nums[i] = (int)Math.pow(nums[i], 2);
}
Arrays.sort(nums);
return nums;
}
}
复杂度分析:
- 时间复杂度:O(nlogn)
- 空间复杂度:O(logn)
二.双指针(进阶)
Java:
平方后的数组的特点是中间小,两头大,利用双指针依次选出最大的,逆序放入新数组;
class Solution {
public int[] sortedSquares(int[] nums) {
int[] ans = new int[nums.length];
int pointer = nums.length - 1;
for(int left = 0, right = nums.length - 1; left <= right;) {
if (nums[left] * nums[left] > nums[right] * nums[right]) {
ans[pointer] = nums[left] * nums[left];
left++;
} else {
ans[pointer] = nums[right] * nums[right];
right--;
}
pointer--;
}
return ans;
}
}
复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(1)