有一个有序数组从大到小排列:-10 -5 1 2 3 4,将他们的每一项平方,然后再形成新的有序数组。
解法:双指针
因为前面是负数,后面是正数,平方和的最大值一定是从两端取得,所以可以定义一个头指针和尾指针,比较头部平方和尾部平方,取大的排到尾部。
伪代码:
vector<int> result;
k = numsize - 1;
for(i = 0, j = numsize - 1; i <= j)
{
if(nums[i]*nums[i] > nums[j]*nums[j])
{
result[k--] = nums[i]*nums[i];
i++;
}
else
{
result[k--] = nums[j]*nums[j];
j--;
}
}