977. 有序数组的平方
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
这一题比较简单,最容易想到的思路就是对原数组用元素的绝对值进行排序,那么程序的时间复杂度最低也得O(NlogN)。考虑到原数组已经是排好序的,所以可以采用双指针,从两段开始遍历,这样出来的元素就是按照绝对值排序的了,这时程序的时间复杂度为O(N)。C++的实现代码如下:
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
if(!A.size()) return {};
int number=A.size();
vector<int> result(number,0);
int left=0;
int right=A.size()-1;
int index=A.size()-1;
while(left<=right)
{
if(abs(A[right])>abs(A[left]))
{
result[index]=A[right]*A[right];
--right;
--index;
}
else
{
result[index]=A[left]*A[left];
++left;
--index;
}
}
return result;
}
};
运行效果:
相同的思路python的代码如下:
class Solution:
def sortedSquares(self, A: List[int]) -> List[int]:
if not A:
return
listSize=len(A)
result=[0]*listSize
left,right,index=0,listSize-1,listSize-1
while(left<=right):
if abs(A[left])<abs(A[right]):
result[index]=A[right]*A[right]
right-=1;
else:
result[index]=A[left]*A[left]
left+=1
index-=1
return result
运行效果:
来源:力扣(LeetCode)链接