977.有序数组的平方
题目链接:27. 移除元素
思路:双指针从两头往里遍历,存储平方值大的到新数组res中
class Solution(object):
def sortedSquares(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
left=0
right=len(nums)-1
i=len(nums)-1
res=[float('inf')]*len(nums)
while left <= right:
if nums[right]**2 >= nums[left]**2:
res[i]= nums[right]**2
right-=1
else:
res[i]= nums[left]**2
left+=1
i-=1
return res
时间复杂度:O(n)
209. 长度最小的子数组
题目链接:209. 长度最小的子数组
思路:滑动窗口
- 滑动窗口的内容是什么?元素和大于等于target的子数组
- 滑动窗口的起点?调整窗口大小
- 滑动窗口的终点?用于进行遍历数组的整体流程
class Solution(object):
def minSubArrayLen(self, target, nums):
"""
:type target: int
:type nums: List[int]
:rtype: int
"""
# 滑动窗口
left=0
right=0
sum=0
min_len=float('inf')
while right<=len(nums)-1:
sum+=nums[right]
while sum>=target:
min_len=min(min_len,right-left+1)
sum-=nums[left]
left+=1
right+=1
return min_len if min_len!=float('inf') else 0
时间复杂度:O(n)
空间复杂度:O(1)
59. 螺旋矩阵 II
题目链接:59. 螺旋矩阵 II
关键:循环不变量,保持左闭右开区间
每一次循环绕一个圈,需要定义一个offset来记录当前是哪个圈
class Solution(object):
def generateMatrix(self, n):
"""
:type n: int
:rtype: List[List[int]]
"""
res=[[0] * n for _ in range(n)]
loop=n//2
startx,starty=0,0
num=1
for offset in range(1,loop+1):
for j in range(starty, n-offset):
res[startx][j]=num
num+=1
for i in range(startx,n-offset):
res[i][n-offset]=num
num+=1
for j in range(n-offset,starty,-1):
res[n-offset][j]=num
num+=1
for i in range(n-offset,startx,-1):
res[i][starty]=num
num+=1
startx+=1
starty+=1
if n%2!=0:
mid=n//2
res[mid][mid]=num
return res
时间复杂度:O(n^2)遍历二维矩阵
空间复杂度:O(1)