以LeetCode简单算法题为例:
给你一个按 非递减顺序 排序的整数数组 nums,
返回 每个数字的平方 组成的新数组,
要求也按 非递减顺序 排序。
双指针解法(时间复杂度:O(n),空间复杂度:O(n))
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
int k = A.size() - 1;
vector<int> result(A.size(), 0);
for (int i = 0, j = A.size() - 1; i <= j;) {
if (A[i] * A[i] < A[j] * A[j]) {
result[k--] = A[j] * A[j];
j--;
}
else {
result[k--] = A[i] * A[i];
i++;
}
}
return result;
}
};
暴力解法:(时间复杂度:O(n log n),空间复杂度:O(1))
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for(int i = 0; i < nums.size(); i++) nums[i] = nums[i] * nums[i];
sort(nums.begin(),nums.end());
return nums;
}
};