这题小伙伴们肯定很快想到 把每个数平方之后再排序吧!
但排序你是否掌握了呢?哈哈哈,不用担心,我们可以直接引用排序函数。
但小伙伴们,对于排序的基本算法自己也一定要掌握哦!(偷偷告诉小伙伴们,我其实也没掌握呜呜呜,需要反复多多练习。)
废话不多说,直接上代码:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i = 0; i < nums.size(); i++){
nums[i] *= nums[i];
}
sort(nums.begin(),nums.end());
return nums;
}
};
sort();就是我们说的排序函数(快速排序)啦!默认为升序排列。
但是小伙伴们别忘了加必须的头文件哦!
#include<algorithm>
using namespace std;
当然还有一种情况,我们可以用上双指针法。
就是数组平方的最大值就在数组的两端,不可能是中间。小伙伴们,当你们看到有负数的升序排列时,就可以立马想到用这个方法哦!
来,咱们上代码:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int k = nums.size() - 1;
vector<int> result(nums.size(),0);
int j = nums.size() - 1;
for(int i = 0; i <= j;) {
if(nums[i]*nums[i] < nums[j]*nums[j]){
result[k--] = nums[j]*nums[j];
j--;
}
else{
result[k--] = nums[i]*nums[i];
i++;
}
}
return result;
}
};
小伙伴们,如果一下子不能理解建议动手画一下图哦!思路可能会清晰一点。
或者明天再看看,但是千万不要放在一边不管或者是放弃哦!
咱们一起加油呀!