力扣-977题(Java)-双指针

题目链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array/
题目如下:
力扣-977题(Java)-双指针

class Solution {
    public int[] sortedSquares(int[] nums) {
        //题目中数组已是升序排序
        //找出数组中负数和非负数的分界线
        //如果全是非负数,则平方后升序;如果全是负数,则平方后为倒序
        int len=nums.length;
        int pos=-1;
        
        for(int i=0;i<len;i++)
        if(nums[i]<0) pos=i;
        else break;

        int[] array=new int[len];
        int pos1=pos,pos2=pos+1;//第一部分:0~pos1 第二部分:pos2~len-1

        for(int i=0;i<len;i++)
        nums[i]=nums[i]*nums[i];
        if(pos==-1) return nums;//全为正数

        int j=0;
        while(pos1>=0&&pos2<len){
            if(nums[pos1]>nums[pos2]) array[j++]=nums[pos2++];
            else if(nums[pos1]<nums[pos2]) array[j++]=nums[pos1--];
            else {array[j++]=nums[pos1--];array[j++]=nums[pos2++];}
        }
        
        while(pos1>=0) array[j++]=nums[pos1--];
        while(pos2<len) array[j++]=nums[pos2++]; 

        return array;

    }
}
上一篇:Lc_977有序数组的平方


下一篇:【力扣】977. 有序数组的平方--Python实现