977. 有序数组的平方 - 力扣(LeetCode)
题目描述
解题思路
暴力解法
class Solution {
public int[] sortedSquares(int[] nums) {
int[] ans = new int[nums.length];
for (int i = 0; i < nums.length; ++i) {
ans[i] = nums[i] * nums[i];
}
Arrays.sort(ans);
return ans;
}
}
双指针
0两边的元素都是有序的。假设0的下标为index。则nums[0…index]和nums[nums.length-1]到nums[index + 1]都是非递增的。
可以从两端向中间遍历数组相当于合并有序数组。
class Solution {
public int[] sortedSquares(int[] nums) {
int n = nums.length;
int index = n - 1;
int i = 0, j = n - 1;
int[] res = new int[n];
while(i <= j){
if(Math.abs(nums[i]) > Math.abs(nums[j])){
res[index --] = nums[i] * nums[i];
i ++;
}else{
res[index --] = nums[j] * nums[j];
j --;
}
}
return res;
}
}