977 有序数组的平方

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

示例 1:
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]

示例 2:
输入:[-7,-3,2,3,11]
输出:[4,9,9,49,121]

提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A 已按非递减顺序排序。

方法1:
主要思路:
(1)将原来的数组中的元素平方后存储,并再次排序;

class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        vector<int> res(A.size(),0);
        for(int i=0;i<A.size();++i){
            res[i]=A[i]*A[i];
        }
        sort(res.begin(),res.end());
        return res;
    }
};

方法2:
主要思路:
(1)由于原数组是有序的,其平方值对应的数组之所以顺序不一致,是由于负数的存在,故可以先找出正负数的交界处,然后从交界处,向两端扩展,比较对应的两个数值的平方的大小,存储到结果中;

class Solution {
public:
    vector<int> sortedSquares(vector<int>& A) {
        vector<int>res(A.size(),0);
        //确定left和right的位置
        int left,right;
        int pos=0;
        if(A[0]>=0){
            left=-1;
            right=0;
        }
        else if(A.back()<=0){
            left=A.size()-1;
            right=A.size();
        }
        else{
            while(pos<A.size()&&A[pos]<0){
                ++pos;
            }
            right=pos;
            left=pos-1;
        }
        pos=0;
        //逐个的添加元素到结果中
        while(left>=0||right<A.size()){
            if(left>=0&&right<A.size()){
                if(A[left]*A[left]<A[right]*A[right]){
                    res[pos]=A[left]*A[left];
                    --left;
                }
                else{
                    res[pos]=A[right]*A[right];
                    ++right;
                }
            }
            else if(left>=0){
                res[pos]=A[left]*A[left];
                --left;
            }
            else {
                res[pos]=A[right]*A[right];
                ++right;
            }
            ++pos;
        }
        return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值