题目描述
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
本题思路
暴力
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
for (int i = 0; i < A.size(); i++) {
A[i] *= A[i];
}
sort(A.begin(), A.end());
return A;
}
};
每个数都等于自身的平方,再进行排序即可
双指针法
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size(), 0);
int k = nums.size() - 1; // 用来表示所放元素的位置
for (int i = 0, j = nums.size() - 1; i <= j;) {
if (nums[i] * nums[i] > nums[j] * nums[j]) {
result[k] = nums[i] * nums[i];
k--;
i++;
} else {
result[k--] = nums[j] * nums[j];
j--;
}
}
return result;
}
};
利用双指针,两边元素比较逐步向中间合拢得过程,得到由小到大得数组。细节i <= j 需要注意最后两个数还需要比较