Leetcode 977:有序数组的平方

题目描述

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

示例1

输入:[-4,-1,0,3,10]

输出:[0,1,9,16,100]

解题思路:

方法一:先将原始序列按绝对值大小排序,然后逐元素求平方

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

方法二:使用two_pointer方法,先找到第一个大于等于0的位置,又该位置向两边移动,将较小的平方数放入新数组

static int low_bound(vector<int>& A,int x){
        int i = 0,j = A.size() - 1;
        while(i < j){
            int mid = (i + j) / 2;
            if(A[mid] >= x) j = mid;
            else i = mid + 1;
        }
        return i;
    }
    vector<int> sortedSquares(vector<int>& A) {
        int j = low_bound(A,0);
        int i = j-1,len = A.size();
        vector<int> ans;
        while(i >= 0 && j < len){
            if(abs(A[i]) > abs(A[j])){
                ans.push_back(A[j]*A[j]);
                j++;
            }else{
                ans.push_back(A[i]*A[i]);
                i--;
            }
        }
        while(i>=0){
            ans.push_back(A[i]*A[i]);
            i--;
        }
        while(j<len){
            ans.push_back(A[j]*A[j]);
            j++;
        }
        return ans;
    }

猜你喜欢

转载自blog.csdn.net/weixin_35338624/article/details/87898723