LeetCode每日一题 (41) 977. 有序数组的平方

977. 有序数组的平方


在这里插入图片描述

题解一:

class Solution {
    
    
public:
    // 可以直接原地将数组元素平方,然后从小到大进行排序 
    vector<int> sortedSquares(vector<int>& A) {
    
    
        for(int i=0;i<A.size();i++){
    
    
            A[i]=A[i]*A[i];
        }
        sort(A.begin(),A.end());
        return A;
    }
};

在这里插入图片描述


题解二:双指针

class Solution {
    
    
public:
    // 1.先找到数组绝对值最小的位置(p1,p2),p1表示负数的结束,p2表示正数的开始
    // 2.然后分别从最小值的位置向两端遍历
    vector<int> sortedSquares(vector<int>& A) {
    
    
       int p1,p2;
       int n=A.size();
       vector<int> result;
       for(int i=0;i<n;i++){
    
    
           if(A[i]<0){
    
    
               p1=i;
           }else{
    
    
               break;
           }
       }
       
       // 上面循环结束就是p2在正数的位置
       p2=p1+1;
       while(true){
    
    
           if(p1>-1 && p2<n){
    
    
               if(A[p1]*A[p1] < A[p2]*A[p2]){
    
    
                   result.push_back(A[p1]*A[p1]);
                   p1--;
               }else{
    
    
                   result.push_back(A[p2]*A[p2]);
                   p2++;
               }
           }
           else if(p1<0 && p2<n){
    
    
                result.push_back(A[p2]*A[p2]);
                p2++;
           }
           else if(p1>-1 && p2>=n){
    
    
                result.push_back(A[p1]*A[p1]);
                p1--;
           }
           else{
    
    
               break;
           }
      }
      return result;
    }
};

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_45021180/article/details/109120713