977.有序数组的平方
思路1:
先将数组中每个元素的值改为该元素的平方,再用Arrays的sort方法排序即可
时间复杂度为O(nlogn) (因为sort方法的复杂度 O(nlogn)) 空间复杂度为O(logn) 需要O(logn)的栈空间进行排序
代码实现
class Solution {
public int[] sortedSquares(int[] nums) {
for (int i = 0; i < nums.length; i++) {
nums[i] = nums[i] * nums[i];
}
Arrays.sort(nums);
return nums;
}
}
思路2(双指针):
因为数组中可能有负数也有正数,所以平方后的最大值一定在数组的最左边或者最右边,那么就可以新创个数组,比较出最大的放进新数组末尾,依次进行即可。
时间复杂度为 O(n) 空间复杂度为O(n)
代码实现
class Solution {
public int[] sortedSquares(int[] nums) {
int left = 0;
int right = nums.length - 1;
int[] result = new int[nums.length];
int index = result.length - 1;
while (left <= right) {
if (nums[left] * nums[left] > nums[right] * nums[right]) {
result[index--] = nums[left] * nums[left];
left++;
} else {
result[index--] = nums[right] * nums[right];
right--;
}
}
return result;
}
}