题目地址:977. Squares of a Sorted Array
解题思路:
又是一道双指针的题目,看见秒想到双指针(平方直接调用sort方法也行,但是这么写这题就没意思了)。但是,我一直在想,不增加空间消耗的情况下,如何进行排列,想了半天把自己绕进去了。开辟一个新数组,倒序放置就非常简单了。一定要利用原来数组是递增的这个有利条件,因为进行平方后原数组是“三角式”结构,即两边大,中间小,所以一边放置一个指针进行比较就可以了,数组两端要么左边最大,要么右边最大。两数打擂,大的插入新数组,并更换下一个数。需要注意的是边界条件,一定是j>=i
,否则如果一起指到同一个数会丢失一个结果。
class Solution {
public int[] sortedSquares(int[] nums) {
int pos=nums.length-1;
int[] newArray = new int[nums.length];
for (int i=0,j=nums.length-1;j>=i;){
if (nums[i]*nums[i]>nums[j]*nums[j]){
newArray[pos]=nums[i]*nums[i];
i++;
}else {
newArray[pos]=nums[j]*nums[j];
j--;
}
pos--;
}
return newArray;
}
}
标签:977,Java,nums,int,题解,pos,newArray,数组,Sorted
From: https://www.cnblogs.com/hooyeefam/p/17438078.html