leecode刷题第六天
1.今天的第一题:
算法的主要思想是遍历nums,若nums[i]与前面的值相加大于nums[i],则将nums[i]加入到前面保存的数组值中,否则,舍弃前面的数组值,新建一个数组,继续执行。代码如下:
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
length=len(nums)
memo=[0]*length
memo[0]=nums[0]
for i in range(1,len(nums)):
memo[i]=max(nums[i]+memo[i-1],nums[i])
maxs=nums[0]
for i in range(1,len(memo)):
maxs=max(maxs,memo[i])
return maxs
如果这道题要求得到最大和对应的字数组的话,代码入下,只需要跟踪一个start标志即可:
def maxSubArray(nums):
length=len(nums)
memo=[0]*length
memo[0]=nums[0]
start=0
end=0
for i in range(1,len(nums)):
if nums[i]+memo[i-1]>nums[i]:
memo[i]=nums[i]+memo[i-1]
else:
memo[i]=nums[i]
start=i
maxs=nums[0]
for i in range(1,len(memo)):
maxs=max(maxs,memo[i])
end=memo.index(maxs)
return nums[start:end+1]
2.第二题:
解法的搬运工:
如果数组为空,返回空数组
定义4个边界以及当前方向
当左边界小于等于有边界,且上边界小于等于下边界时,执行while循环,按照右下左上的顺序,以此将路径上的字符添加到结果里
while循环结束后,返回结果
代码如下:
class Solution:
def spiralOrder(self, matrix: List[List[int]]) -> List[int]:
if len(matrix)==0:
return []
top=0
bottom=len(matrix)-1
left=0
right=len(matrix[0])-1
direction="right"
result=[]
while(left<=right and top<=bottom):
if(direction=="right"):
for i in range(left,right+1):
result.append(matrix[top][i])
top+=1
direction="down"
elif(direction=="down"):
for i in range(top,bottom+1):
result.append(matrix[i][right])
right-=1
direction="left"
elif (direction=="left"):
for i in range(right,left-1,-1):
result.append(matrix[bottom][i])
bottom-=1
direction="top"
elif (direction=="top"):
for i in range(bottom,top-1,-1):
result.append(matrix[i][left])
left+=1
direction="right"
return result