目录
题目描述
给你一个按 非递减顺序 排序的整数数组 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]
思路
双指针
因为数组是非递减顺序排序的
并且因为题目要求返回每个数字的平方组成的新数组按照非递减顺序
由此可以得出数组最大的数不是在最左边就是在最右边
此时可以考虑双指针法了,i指向起始位置,j指向终止位置。
定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。
题解
class Solution {
public int[] sortedSquares(int[] nums) {
int [] res=new int[nums.length];
int i=0;
int j=nums.length-1;
int r=nums.length-1;
while(i<=j){
if(nums[i]*nums[i]<=nums[j]*nums[j]){
res[r]=nums[j]*nums[j];
r--;
j--;
}
else{
res[r]=nums[i]*nums[i];
r--;
i++;
}
}
return res;
}
}
复杂度
时间 O(N)
空间 O(1)