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;i 1;i++)//用冒泡排序进行从小到大的 排序 for(int j=0;j 1;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(i 1) 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;
}
};