leecode刷題第六天
1.今天的第一題:
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