977 有序数组的平方

1、题目

给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
 
示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]

示例 2:
输入:[-7,-3,2,3,11]
输出:[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 };

猜你喜欢

转载自www.cnblogs.com/hehesunshine/p/11699390.html