文章目录
简介
我将参考leetcode中的部分题解和网上资料,自己将自己的刷题思路和过程进行总结。
可能有一些自己的思路,但是大多数还是参考其他网友的想法。
如果对您有帮助我备感荣幸~
解法1
将每个item平方然后排序。
注意,sort需要:
#include<algorithm>
using namespace std;
时间复杂度:
遍历的部分需要n,sort需要nlogn,一共是O(nlogn)
空间复杂度:
res需要n,sort需要logn的栈空间进行排序
解法2
利用题目中本身有序这个特点,使用双指针法。
首先p1, p2分别从nums的两端遍历,为了寻找最大的平方数。
然后将最大的平方数放到res的最后,然后向前移动res的游标。
主要利用了nums数组中存在负数和有序这两个特点和最后我们要返回的是每个数字的平方这个特点,这就说明了最大的平方数一定会在nums的两端产生。
时间复杂度:
只需要遍历一遍nums,O(n)
空间复杂度:
只需要一个额外的数组res,O(n)