给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
请你设计时间复杂度为 O(n) 的算法解决本问题
双指针法:我们可以使用两个指针分别指向位置 0 和 n−1,每次比较两个指针对应的数,选择较大的那个逆序放入答案并移动指针。这种方法无需处理某一指针移动至边界的情况,读者可以仔细思考其精髓所在。
Python版本:
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
i, j, pos = 0, n - 1, n - 1
ans = [0] * n
while i <= j:
if nums[i] *nums[i] > nums[j] *nums[j]:
ans[pos] = nums[i] *nums[i]
i += 1
else:
ans[pos] = nums[j] *nums[j]
j -= 1
pos -= 1
return ans
Java版本:
class Solution {
public int[] sortedSquares(int[] nums) {
int n = nums.length;
int i = 0, pos = n - 1, j = n - 1;
int[] ans = new int[n];
while (i <= j) {
if (nums[i] * nums[i] > nums[j] * nums[j]) {
ans[pos] = nums[i] * nums[i];
++i;
} else {
ans[pos] = nums[j] * nums[j];
--j;
}
--pos;
}
return ans;
}
}
参考资料: