一、题目
二、代码
class Solution
{
public int[] sortedSquares(int[] nums)
{
int i;
int length=nums.length;
int[] result = new int[length];
int index=length-1;
int left=0;
int right=length-1;
for(i=0;i<length;i++)
{
nums[i]=nums[i]*nums[i];
}
while(left<right)
{
if(nums[left]>nums[right])
{
result[index]=nums[left];
left++;
index--;
}
else
{
result[index]=nums[right];
right--;
index--;
}
}
result[index]=nums[left];
return result;
}
}
三、运行结果
四、附录
二刷
class Solution
{
//双指针
public int[] sortedSquares(int[] nums)
{
int i;
int length = nums.length;
int left = -1;
int right = length;
int []result = new int[length];
int index = 0;
for(i=0;i<length;i++)
{
if(nums[i]<0) left = i;
else break;
}
for(i=length-1;i>=0;i--)
{
if(nums[i]>=0 ) right = i;
else break;
}
// System.out.println("left " +left);
// System.out.println("right " +right);
while(left>=0&&right<length)
{
int left_num = nums[left]*nums[left];
int right_num = nums[right]*nums[right];
if(left_num<right_num)
{
result[index] = left_num;
left--;
index++;
// System.out.println(" 1 "+" index " +index +" left "+left);
}
else
{
result[index] = right_num;
right++;
index++;
// System.out.println(" 2 "+" index" +index+" right "+right);
}
}
while(left>=0)
{
result[index] = nums[left]*nums[left];
left--;
index++;
// System.out.println(" 3 "+" index " +index +" left "+left);
}
while(right<length)
{
result[index] =nums[right]*nums[right];
right++;
index++;
// System.out.println(" 4 "+" index" +index + " right "+right);
}
return result;
}
}