● 今日学习的文章链接和视频链接
● 自己看到题目的第一想法
数组内元素每个平方,然后再从小到大排序
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
squared_nums = [i**2 for i in nums] #平方
squared_nums.sort() #排序
return squared_nums
● 看完代码随想录之后的想法
平方后排序是最简单的办法,但时间复杂度更长为 O(n + nlogn);可用双指针方法,时间复杂度为O(n)
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
k = len(nums)
squared_nums = [0]*k # 创建一个长度为k的列表,每个元素都是0,用于存储平方数
left,right = 0,k-1 # 双指针初始化,left指向列表头,right指向列表尾
for i in range(k-1,-1,-1):
if nums[left]**2 > nums[right]**2:
squared_nums[i] = nums[left]**2
left += 1
else:
squared_nums[i] = nums[right]**2
right -= 1
return squared_nums
(版本一)双指针法
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l, r, i = 0, len(nums)-1, len(nums)-1
res = [float('inf')] * len(nums) # 需要提前定义列表,存放结果
while l <= r:
if nums[l] ** 2 < nums[r] ** 2: # 左右边界进行对比,找出最大值
res[i] = nums[r] ** 2
r -= 1 # 右指针往左移动
else:
res[i] = nums[l] ** 2
l += 1 # 左指针往右移动
i -= 1 # 存放结果的指针需要往前平移一位
return res
● 自己实现过程中遇到哪些困难
双指针循环怎么写,发现有两种写法,如上两个代码
如何定义一个空列表,如上方式
● 今日收获,记录一下自己的学习时长
学会了平方怎么求,数组排序函数,学习文章后也理解了双指针方法去提升效率
(2.5小时)