Problem: 977. 有序数组的平方
思路
双指针
解题方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rr4QeJ5k-1679043787275)(https://pic.leetcode.cn/1679033780-WDpnXg-%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230317141540.jpg)]
复杂度
- 时间复杂度:
O ( n ) O(n) O(n) - 空间复杂度:
O ( 1 ) O(1) O(1)
Code
//暴力AC
class Solution {
public int[] sortedSquares(int[] nums) {
int length = nums.length;
for(int i = 0;i < length;i++){
nums[i] = nums[i] * nums[i];
}
Arrays.sort(nums);
return nums;
}
}
//双指针
class Solution {
public int[] sortedSquares(int[] nums) {
int length = nums.length;
int[] arr = new int[length];
int left = 0, right = length - 1;
int arrIndex = length - 1;
//因为指针是从两头往中间,所以数组下标更新是从右往左,这样按从左往右就是从大到小了
for(;left <= right;){
if(nums[left] * nums[left] < nums[right] * nums[right]){
arr[arrIndex--] = nums[right] * nums[right];
right--;
}else{
arr[arrIndex--] = nums[left] * nums[left];
left++;
}
}
nums = arr;
return nums;
}
}