209:
这道题第一反应肯定是两轮for循环暴力拆解了,但是很遗憾的超时了,其实也能想到能否像一个滑动的水滴一样从数组从左往右挪动过去,但是我觉得之前最不明白的也是卡哥点醒的那点,这题需要以末尾位置作为锚定点来进行循环。
其次就是python太久没敲代码手生了,一些语法基础需要再熟练一下:
max_value=float('inf')
min_value=float('-inf")
#多个赋值
#不能i,j,k=0
i = length = sums = 0
#或者解包
i, length, sums = 0, 0, 0
class Solution:
def minSubArrayLen(self, target: int, nums: List[int]) -> int:
result=float('inf')
flag=False
i,length,sums=0,0,0
for j in range(0,len(nums)):
sums+=nums[j]
length+=1
while sums>=target:
result=min(result,length)
flag=True
sums-=nums[i]
i+=1
length-=1
if flag:
return result
else :
return 0
59:
遇到这道题我的思路就是,先初始一个二维矩阵用来填写数组,再初始化一个同样纬度矩阵用来做为标记矩阵,从00开始往右依次放入数据,如果遇到边界(这里的边界包含两种,一个是数组本身边界,另外一个是行进方向上,下一个数据在标记矩阵中对应为True)就改变方向,方向为右,下,左,上对应0,1,2,3(%4),直到修改过n^2的数据就结束返回。
但是在学习卡哥的代码以后,发现其实针对这类有规律的题目,可以进一步简化算法,找出其中的规律,我比较喜欢代码录中的四个边界的方法,不断缩小边界,在确定需要构造的数组是多大体量的情况下,真是一个不错的方法,而不像我这种需要从当前改变元素位置去探寻下一个位置在哪,而是跳出来给其设定找寻条件
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
top,bottom,left,right=0,n-1,0,n-1
nums=1
matrix=[[0]*n for _ in range(n)]
while top<=bottom and left<=right:
for i in range (left,right+1):
matrix[top][i]=nums
nums+=1
top+=1
for i in range (top,bottom+1):
matrix[i][right]=nums
nums+=1
right-=1
for i in range(right,left-1,-1):
matrix[bottom][i]=nums
nums+=1
bottom-=1
for i in range (bottom,top-1,-1):
matrix[i][left]=nums
nums+=1
left+=1
return matrix
786

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



