题目:力扣
思路:
从描述中可以看出,nums数组中不止有正数,还包括负数,所以这里就无法直接平方存放了。
暴力解法可以通过先进行平方,然后再通过排序再存放数组,但是这样时间复杂度就比较大 。
所以这里我们可以采用 双指针法。
下面是详细的思路:
代码:
class Solution {
public int[] sortedSquares(int[] nums) {
int left = 0;
int right = nums.length - 1;
int[] array = new int[nums.length];
int index = array.length - 1;
while (left <= right) {
if (nums[left] * nums[left] > nums[right] * nums[right]) {
array[index] = nums[left] * nums[left];
index--;
left++;
} else {
array[index] = nums[right] * nums[right];
index--;
right--;
}
}
return array;
}
}
总结:
双指针是数组中常用的方法。这里复杂度为O(n)