有序数组的平方
题目
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums 已按 非递减顺序 排序
思路
1.暴力方法
也就是直接将所有的元素全部先平方,之后利用c++的sort函数将所有的元素全部排序,sort的排序会根据n的大小来选择合适的排序方法。
2.前后元素比较的方法(双指针法)
也就是使用前后两个指针,每次对比两个指针所指的元素平方的大小,哪个元素大的话就先将这个元素存储起来之后变化该指针,持续向后即可
代码
1.暴力方法
#include<iostream>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int len = nums.size();
for(int i = 0;i < len;i++){
nums[i] = nums[i]*nums[i];
}
sort(nums.begin(),nums.end());
return nums;
}
};
int main(int argc, char const *argv[])//测试
{
Solution so;
vector<int>a = {-7,-3,2,3,11};
so.sortedSquares(a);
for(int i = 0;i<a.size();i++){
cout<<a[i]<<endl;
}
system("pause");
return 0;
}
2.双指针法
#include<iostream>
#include<vector>
#include<math.h>
#include<algorithm>
using namespace std;
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int>result(nums.size(),0);
int i = nums.size()-1;
for(int fast = nums.size()-1,slow = 0;slow<=fast;){
if((nums[slow]*nums[slow])<(nums[fast]*nums[fast])){
result[i--]=nums[fast]*nums[fast];
fast--;
}else{
result[i--]=nums[slow]*nums[slow];
slow++;
}
}
return result;
}
};
int main(int argc, char const *argv[])//测试
{
Solution so;
vector<int>a={-4,-1,0,3,10};
a=so.sortedSquares(a);
for(int i = 0;i<a.size();i++){
cout<<a[i]<<endl;
}
system("pause");
return 0;
}

浙公网安备 33010602011771号