977. 有序数组的平方


C++

1.时间超过;

#include
#include
using namespace std; 
class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int l=nums.size();
        for(int i=0;i)
            nums[i]=nums[i]*nums[i];//求每个数的平方 
        for(int i=0;i1;i++)//用冒泡排序进行从小到大的 排序 
        for(int j=0;j1;j++)
        {
        if(nums[j]>nums[j+1])
        {
        int t=nums[j];
        nums[j]=nums[j+1];
        nums[j+1]=t;
        }
        }
         return nums;
    }
   
};
int main()
{
    
    int a[5]={-7,-3,2,3,11};
    vector <int> nums(a,a+5);//对nums进行赋值 
    Solution s;
    nums=s.sortedSquares(nums);
    cout<<"[";
    for(int i=0;i//输出排序后的数
    {cout<<nums[i]; 
    if(i1)
    cout<<",";
    }
    cout<<"]";
    return 0;
}

2.用sort函数

class Solution {
public:
    vector sortedSquares(vector& nums) {
    	int l=nums.size();
    	vector num(nums.size());
    	for(int i=0;i

  用冒泡排序会使时间超出范围;

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> ans;
        for (int num: nums) {//int num:nums 遍历nums数组,并把每个值赋给num 
            ans.push_back(num * num);
        }
        /*int num;
        for(int i=0;i*/
        sort(ans.begin(), ans.end());
        return ans;
    }
};

双指针

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int l=nums.size(),n=-1;
        vector <int> ans;
        for(int i=0;i//求出最后一个负数的下标
        {
            if(nums[i]<0)     n=i;
            else             break;
         } 
         int i=n,j=n+1; //负数范围0~n,正数 n+1~l-1;
        while(i>=0||j<l)
        {
            if(i<0)
            ans.push_back(nums[j]*nums[j]),j++;
            else if(j==l)
            ans.push_back(nums[i]*nums[i]),i--;//如果正数全部压入,将其剩下的负数按顺序压入;
             else if(nums[i]*nums[i]nums[j])
             ans.push_back(nums[i]*nums[i]),i--;
             else if(nums[i]*nums[i]>=nums[j]*nums[j])
             ans.push_back(nums[j]*nums[j]),j++;//压入较小的        
        }
        return ans; 
        
    }
};