Java教程

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

本文主要是介绍力扣-977题(Java)-双指针,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array/
题目如下:
在这里插入图片描述

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;

    }
}
这篇关于力扣-977题(Java)-双指针的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!