力扣 209.长度最小的子数组
题目链接:https://leetcode.cn/problems/minimum-size-subarray-sum/
思路:这个题目还是用到了双指针法,但是是双指针的区间。可以想象成一条毛毛虫,首先右边的指针先动,一直动,直到区间数值相加先大于等于目标数值。那么这时候再动左边的指针,缩短距离,因为有可能更短的距离会符合大于等于目标数值的要求,例如[1,1,1,1,100],目标数值是100,一开始一直动到第五个数字,相加之和才大于等于100,那么这时候左边就要动了,会发现子数组缩短还是满足条件,那么就要更新长度的信息,直到缩短到不符合条件,右边指针再继续动。
class Solution(object):
def minSubArrayLen(self, target, nums):
i = 0 #左边指针
j = 0 #右边指针
sum = 0
long = len(nums)
min_len = float('inf')
for j in range(long):
sum += nums[j]
while sum >= target:
min_len = min(min_len, j - i + 1) #这里需要一个判断,不能直接min_len = j+i+1
sum -= nums[i]
i += 1
j += 1
return min_len if min_len != float('inf') else 0
solution = Solution()
target = 4
nums = [1,4,4]
result = solution.minSubArrayLen(target,nums)
print(result)
力扣 59.螺旋矩阵II
题目链接:https://leetcode.cn/problems/spiral-matrix-ii/
以下是我的错误代码,我在debug的时候发现大循环是无限循环的,没办法结束,尝试过n-1或者n-2去改变数值但是还是错了,但是n/2是按照代码随想录视频写的
class Solution(object):
def generateMatrix(self, n):
start_x = 0
start_y = 0
offset = 1
count = 1
i = 0
j = 0
nums = [[0] * n for _ in range(n)]
while n / 2 :
while j < n - offset:
nums[start_x][j] = count
count += 1
j += 1
while i < n - offset:
nums[i][j] = count
count += 1
i += 1
while j > start_y:
nums[i][j] = count
count += 1
j -= 1
while i > start_x:
nums[i][j] = count
count += 1
i -= 1
start_x += 1
start_y += 1
offset +=1
if n%2 == 1:
nums[i][j] = count
return nums
solution = Solution()
n = 3
result = solution.generateMatrix(3)
print(result)
以下是代码随想录的正确代码:
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
nums = [[0] * n for _ in range(n)]
startx, starty = 0, 0 # 起始点
loop, mid = n // 2, n // 2 # 迭代次数、n为奇数时,矩阵的中心点
count = 1 # 计数
for offset in range(1, loop + 1) : # 每循环一层偏移量加1,偏移量从1开始
for i in range(starty, n - offset) : # 从左至右,左闭右开
nums[startx][i] = count
count += 1
for i in range(startx, n - offset) : # 从上至下
nums[i][n - offset] = count
count += 1
for i in range(n - offset, starty, -1) : # 从右至左
nums[n - offset][i] = count
count += 1
for i in range(n - offset, startx, -1) : # 从下至上
nums[i][starty] = count
count += 1
startx += 1 # 更新起始点
starty += 1
if n % 2 != 0 : # n为奇数时,填充中心点
nums[mid][mid] = count
return nums
760

被折叠的 条评论
为什么被折叠?



