
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
//本题思路:先把数组分成正负两个 按绝对值排列的数组 然后再处理
//二次思考 直接找到的位置 没必要声明两个数组 干就完事了
//常规变量
int i=0;
int j=0;
int k=0;
//本题变量
int size=0;
size= nums.size();
vector<int> vector_for_return(size,0); //迭代器的使用,必须要先用push_back()或者={}初始化,才可以
if(size!=0)
{
std::cout<<"size "<<size<<std::endl;
int record_positive=0;
// int vector_for_return[size]; //数组声明并且清零
// for(i=0;i<=size-1;i++) vector_for_return[i]=0;
//首先需要找到0 作为分界点
if(nums[0]>=0) //不存在0的情况 全部大于0
{
record_positive=-1;
}
else if(nums[size-1]<0) //不存在0的情况 全部都小于0
{
record_positive=-2;
}
else
{
for(i=0;i<=size-1;i++)
{
if(nums[i]>=0)
{
record_positive=i;
break;
}
}
}
std::cout<<"record_positive "<<record_positive<<std::endl;
if(record_positive==-1) for(i=0;i<=size-1;i++) vector_for_return[i]=nums[i]*nums[i];
if(record_positive==-2) for(i=size-1;i>=0;i--) vector_for_return[(size-1)-i]=nums[i]*nums[i];
if(record_positive!=-1&&record_positive!=-2)
{
j=record_positive-1;
k=record_positive;
std::cout<<"j "<<j<<std::endl;
std::cout<<"k "<<k<<std::endl;
for(i=0;i<=size-1&&j>=0&&k<=size-1;i++)
{
std::cout<<"j in "<<j<<std::endl;
std::cout<<"k in "<<k<<std::endl;
if(nums[j]*nums[j]<=nums[k]*nums[k])
{
vector_for_return[i]=nums[j]*nums[j];
j=j-1;
std::cout<<"j final "<<j<<std::endl;
std::cout<<"i"<<i<<std::endl;
std::cout<<"vector_for_return[i]"<<vector_for_return[i]<<std::endl;
}
else
{
vector_for_return[i]=nums[k]*nums[k];
k=k+1;
std::cout<<"i"<<i<<std::endl;
std::cout<<"vector_for_return[i]"<<vector_for_return[i]<<std::endl;
std::cout<<"k final"<<k<<std::endl;
}
}
//赋值完成后的情况应是一边到结尾 另一边未到
if(j==-1&&k!=size)
{
for(;i<=size-1,k<=size-1;i++,k++) vector_for_return[i]=nums[k]*nums[k];
}
if(j!=-1&&k==size)
{
for(;i<=size-1,j>=0;i++,j--) vector_for_return[i]=nums[j]*nums[j];
}
}
}
else ;
//for(i=0;i<=size-1;i++) std::cout<<"i "<
return vector_for_return;
}
};
