asp.net动态网站开发崔宁近三天新闻50字左右
有一个有序数组从大到小排列:-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--; }
}