leetcode977(有序数组的平方:双指针法)

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

题解:双指针法,先遍历数组,找出绝对值最小的数start作为起始,设置两个指针left、right,在数组中,left向左移动,right向右移动,设置一个新数组,长度等于A的长度,第一个元素填入start,第二个元素填入A[left]、A[right]中较小的那一个,然后left指针左移或right指针右移(指向被填入数的指针移动),当一个指针移出数组边界后,直接依次填入另一个指针指向的及其后面的数

class Solution {
    public int[] sortedSquares(int[] A) {
        int start=-1;
        for(int i=0;i<A.length;i++){
            if(A[i]>=0){
                if(i>0&&A[i]<A[i-1]) {
                    start = i - 1;
                }else{
                    start=i;
                }
                break;
            }else{
                A[i]*=-1;
            }
        }
        if(start==-1)
            start=A.length-1;
        int left=start-1;
        int right=start+1;
        int[]ans=new int[A.length];
        for(int i=0;i<A.length;i++){
            if(i==0) {
                ans[0] = A[start] * A[start];
                continue;
            }
            if(left>=0&&right<A.length){
                if(A[left]>=A[right]){
                    ans[i]=A[right]*A[right];
                    right++;
                }else{
                    ans[i]=A[left]*A[left];
                    left--;
                }
            }else if(left>=0){
                ans[i]=A[left]*A[left];
                left--;
            }else if(right<A.length){
                ans[i]=A[right]*A[right];
                right++;
            }
        }
        return ans;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值