目录
- 前言
- 算法题(LeetCode 977有序数组的平方)—(保姆级别讲解)
- 分析题目
- 算法思想(重要)
- 暴力解法代码:
- 双指针法(快慢指针法)代码:
- 结束语
前言
本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可,撰写本文章主要目的在于记录自己学习体会并分享给大家,全篇并不仅仅是复制粘贴,更多的是加入了自己的思考,希望读完此篇文章能真正帮助到您!!!
算法题(LeetCode 977有序数组的平方)—(保姆级别讲解)
力扣题目链接
分析题目
- 该数组为
非递减顺序
的顺序整数数组
- 返回的数组也需要按照
非递减
顺序排序
算法思想(重要)
这里主要讲解两种算法思想,分别是:
- 暴力解法
- 双指针法
暴力解法代码:
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;
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
//时间复杂度是 O(n + nlogn)
暴力算法的算法思想其实很简单,主要是分为两个步骤,分别是:
- 先在原有的基础上每个数组元素都进行平方。
- 在已经拼房的基础上使用
快速排序
进行排序即可。
双指针法(快慢指针法)代码:
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;) { // 注意这里要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;
}
};
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
//时间复杂度是 O(n)
为了更能让大家了解暴力解法的算法思想,作者特意画了一张图供大家观看!!!
结束语
如果觉得这篇文章还不错的话,记得点赞 ,支持下!!!
文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览46879 人正在系统学习中