leecode刷題第六天

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章