给你一个按 非递减顺序 排序的整数数组 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 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
已按 非递减顺序 排序
进阶:
- 请你设计时间复杂度为
O(n)
的算法解决本问题
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k=nums.size()-1;
int leftIndex=0;
int rightIndex=nums.size()-1;
vector<int> result(nums.size(),0);
while(leftIndex<=rightIndex){
if(nums[leftIndex]*nums[leftIndex]>=nums[rightIndex]*nums[rightIndex]){
result[k--]=nums[leftIndex]*nums[leftIndex];
leftIndex++;
}else{
result[k--]=nums[rightIndex]*nums[rightIndex];
rightIndex--;
}
}
return result;
}
};
class Solution {
public int[] sortedSquares(int[] nums) {
int k=nums.length-1;
int right=nums.length-1;
int left=0;
int[] result=new int[nums.length];//注意这里构造数组的方法
while(left<=right){
if(nums[left]*nums[left]>=nums[right]*nums[right]){
result[k--]=nums[left]*nums[left];
left++;
}else{
result[k--]=nums[right]*nums[right];
right--;
}
}
return result;
}
}
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
left, right, k=0, len(nums)-1, len(nums)-1 #赋值的时候可以合并
result=[float('-inf')]*len(nums)#在Python中,float('inf')是表示正无穷大的浮点数。类似地,float('-inf')表示负无穷大的浮点数。
while left<=right:
if nums[left]**2>=nums[right]**2:#使用幂运算
result[k]=nums[left]**2
left+=1
else:
result[k]=nums[right]**2
right-=1
k-=1
return result