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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值