代码随想录训练营的第二天(Python)| 977.有序数组的平方、209.长度最小的子数组、59.螺旋矩阵II
977.有序数组的平方
暴力求解(O(n+logn))
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
return sorted(i**2 for i in nums)
双指针(O(n))
由于列表是单调递增的,元素平方后的最大值要么在最前面,要么在最后面
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
l, r = 0, len(nums) - 1
res = [float('inf')]*len(nums)
i = len(nums) - 1 # 从列表最后面开始赋值
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
209.长度最小的子数组
暴力解法
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
n = len(nums)
min_len = float('inf')
for i in range(n):
sum_val = 0
for j in range(i, n):
sum_val += nums[j]
if sum_val >= target:
sub_len = j-i+1
min_len = min(min_len, sub_len)
break
return min_len if min_len != float('inf') else 0
滑动窗口
什么时候缩小窗口
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
n = len(nums)
s, e = 0, 0
min_len = float('inf')
sum_val = 0
while e < n:
sum_val += nums[e]
while sum_val >= target: # 缩小窗口, 这里 为什么不为 if ,因为开始指针向右移动一个位后,还有可能 sum_val >= target
min_len = min(min_len, e-s+1)
sum_val -= nums[s]
s += 1
e += 1
return min_len if min_len != float('inf') else 0
59.螺旋矩阵II
注意点: 使用左闭右开区间。遍历的偏移量和方向,迭代的次数。
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
res = [[0]*n for _ in range(n)] # 初始化矩阵
startx = starty = 0 # 开始位置
loop, mid = n // 2, n // 2 # loop 是为迭代次数,n 为奇数时 mid 为中心
count = 1 # 用计数
for offset in range(1, loop+1): # offset 为偏移量,从 1 开始
for j in range(startx, n-offset): # 从左到右
res[startx][j] = count
count += 1
for i in range(starty, n-offset): # 从上到下
res[i][n-offset] = count
count += 1
for k in range(n-offset, startx, -1): # 从右到左
res[n-offset][k] = count
count += 1
for l in range(n-offset, starty, -1): # 从下到上
res[l][starty] = count
count += 1
startx += 1 # 更新开始位置
starty += 1
if n % 2 == 1: # 填充矩阵中心
res[mid][mid] = count
return res
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~