0977. Squares of A Sorted Array #
题目 #
给定按 非递减顺序 排序的整型数组 nums
,返回 每个数字的平方 组成的新数组,要求新数组也按 非递减顺序 排序。
思路 #
双指针 #
代码 #
双指针 #
class Solution {
public int[] sortedSquares(int[] nums) {
int[] ans = new int[nums.length];
int i = 0, j = nums.length - 1, ptr = nums.length - 1;
while (i <= j) {
int num = Math.abs(nums[i]) > Math.abs(nums[j]) ? nums[i++] : nums[j--];
ans[ptr--] = num * num;
}
return ans;
}
}
class Solution {
public int[] sortedSquares(int[] nums) {
if (nums == null) return null;
int sz = nums.length;
int[] result = new int[sz];
if (nums[0] >= 0) for (int i=0; i<sz; i++) result[i] = nums[i] * nums[i];
else if (nums[sz-1] <= 0) for (int i=sz-1; i>=0; i--) result[sz-1] = nums[i] * nums[i];
else {
int left=-1, right=nums.length; index=0;
while (nums[left+1] < 0) left+=1;
right = left + 1;
while (left >= 0 && right < sz) {
if (-nums[left] < nums[right]) {
result[index] = nums[left] * nums[left];
left -= 1;
}
else {
result[index] = nums[right] * nums[right];
right += 1;
}
index += 1;
}
while (index < sz) {
if (left >= 0) {
result[index] = nums[left] * nums[left];
left -= 1;
}
else {
result[index] = nums[right] * nums[right];
right += 1;
}
}
}
return result;
}
}