前言
本文章一部分內(nèi)容參考于《代碼隨想錄》----如有侵權(quán)請聯(lián)系作者刪除即可,撰寫本文章主要目的在于記錄自己學(xué)習(xí)體會(huì)并分享給大家,全篇并不僅僅是復(fù)制粘貼,更多的是加入了自己的思考,希望讀完此篇文章能真正幫助到您?。?!
算法題(LeetCode 977有序數(shù)組的平方)—(保姆級別講解)
力扣題目鏈接
分析題目
- 該數(shù)組為
非遞減順序
的順序整數(shù)數(shù)組
- 返回的數(shù)組也需要按照
非遞減
順序排序
算法思想(重要)
這里主要講解兩種算法思想,分別是:
- 暴力解法
- 雙指針法
暴力解法代碼:
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;
}
};
//時(shí)間復(fù)雜度是 O(n + nlogn)
暴力算法的算法思想其實(shí)很簡單,主要是分為兩個(gè)步驟,分別是:
- 先在原有的基礎(chǔ)上每個(gè)數(shù)組元素都進(jìn)行平方。
- 在已經(jīng)拼房的基礎(chǔ)上使用
快速排序
進(jì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;) { // 注意這里要i <= j,因?yàn)樽詈笠幚韮蓚€(gè)元素
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;
}
};
//時(shí)間復(fù)雜度是 O(n)
為了更能讓大家了解暴力解法的算法思想,作者特意畫了一張圖供大家觀看?。?!
文章來源:http://www.zghlxwxcb.cn/news/detail-445747.html
結(jié)束語
如果覺得這篇文章還不錯(cuò)的話,記得點(diǎn)贊 ,支持下!??!文章來源地址http://www.zghlxwxcb.cn/news/detail-445747.html
到了這里,關(guān)于看完這篇文章你就徹底懂啦{保姆級講解}-----(LeetCode刷題977有序數(shù)組的平方) 2023.4.20的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!