1、题目
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
输出:[0,1,9,16,100]
示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]
输出:[4,9,9,49,121]
2、思路
- 自己的思路
- 先把每个元素平方
- 内置函数sort排序
- 双指针法(时间复杂度低很多)
- 因为输入的 数组是排好序的,所以最大值一定在数组两端
- 新建一个vector存放排序后的数组
- 建立双指针分别指向原数组的头尾,然后建立一个指针指向新数组的尾部
- 比较原数组首尾两个元素的大小,大的存放新数组里,然后移动指针
- 结束标志就是指向新数组的指针到达了数组的头部
3、代码
自己的思路:
1 class Solution { 2 public: 3 vector<int> sortedSquares(vector<int>& A) { 4 for(int i=0;i<A.size();i++){ 5 A[i]=A[i]*A[i]; 6 } 7 sort(A.begin(),A.end()); 8 return A; 9 } 10 };
双指针法 :
1 class Solution { 2 public: 3 vector<int> sortedSquares(vector<int>& A) { 4 int length = A.size(); 5 vector<int> ans(length); 6 int i = 0, j = length - 1,k = length - 1; 7 while(k>=0){ 8 if(A[i]*A[i]>=A[j]*A[j]){ 9 ans[k]=A[i]*A[i]; 10 i++; 11 } 12 else{ 13 ans[k]=A[j]*A[j]; 14 j--; 15 } 16 k--; 17 } 18 return ans; 19 } 20 };