力扣地址:https://leetcode.cn/problems/squares-of-a-sorted-array/
难度:☆☆☆
题目
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]
方法1:暴力排序
Python代码
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
for i in range(n):
nums[i] *= nums[i]
nums.sort()
return nums
Java代码
class Solution {
public int[] sortedSquares(int[] nums) {
int n = nums.length;
int left = 0;
int right = n - 1;
int i = n - 1;
int[] ans = new int[n];
while (left <= right) {
int leftNum = nums[left] * nums[left];
int rightNum = nums[right] * nums[right];
if (leftNum <= rightNum) {
ans[i] = rightNum;
right --;
} else {
ans[i] = leftNum;
left ++;
}
i --;
}
return ans;
}
}
方法2:借助额外数组,相向双指针
Python代码
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
left, right, i = 0, n - 1, n - 1
ans = [0] * n
while left <= right:
left_num = nums[left] ** 2
right_num = nums[right] ** 2
if left_num <= right_num:
ans[i] = right_num
right -= 1
else:
ans[i] = left_num
left += 1
i -= 1
return ans
Java代码
class Solution {
public int[] sortedSquares(int[] nums) {
int n = nums.length;
int left = 0;
int right = n - 1;
int i = n - 1;
int[] ans = new int[n];
while (left <= right) {
int leftNum = nums[left] * nums[left];
int rightNum = nums[right] * nums[right];
if (leftNum <= rightNum) {
ans[i] = rightNum;
right --;
} else {
ans[i] = leftNum;
left ++;
}
i --;
}
return ans;
}
}