LeetCode刷题(177)~有序数组的平方【双指针】

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


题目描述

给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。

示例 1:

输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]

示例 2:

输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]

提示:

  • 1 <= A.length <= 10000
  • -10000 <= A[i] <= 10000
  • A 已按非递减顺序排序。

解答 By 海轰

提交代码

vector<int> sortedSquares(vector<int>& A) {
for(int i=0;i<A.size();++i)
{
A[i]*=A[i];
}
sort(A.begin(),A.end());
return A;
}

运行结果

LeetCode刷题(177)~有序数组的平方【双指针】_数组


提交代码(双指针)

vector<int> sortedSquares(vector<int>& A) {
int n=A.size();
vector<int> ans(n);
int i=0;// 非负数的第一个数字
while(i<n&&A[i]<0)
++i;
int j=i-1;// 最大的负数
int t=0;
while(i<n&&j>=0)
{
if(A[i]*A[i]<A[j]*A[j])
{
ans[t++]=A[i]*A[i];
++i;
}
else
{
ans[t++]=A[j]*A[j];
--j;
}
}
while(i<n)
{
ans[t++]=A[i]*A[i];
++i;
}
while(j>=0)
{
ans[t++]=A[j]*A[j];
--j;
}
return ans;
}

运行结果

LeetCode刷题(177)~有序数组的平方【双指针】_提交代码_02

题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6