leetcode刷题第七天

leetcode刷题第七天

1.第一题:
在这里插入图片描述
这道题使用动态规划,从前到后太复杂了又难理解,从后向前比较容易理解,思路是这样的新建一个辅助数组memo用来标识第i个节点是否可达,先初始化为0,若i可达则令memo[i]为1,不可达则为0,从nums尾部开始向前循环,若nums[i-1]可以到达nums[i],则将memo[i-1]置为1:
代码如下:

class Solution:    
	def canJump(self, nums: List[int]) -> bool:        
		length=len(nums)        
		memo=[0]*length        
		memo[length-1]=1        
		for i in range(length-2,-1,-1):            		
			maxjump=min(i+nums[i],length-1)            
			for j in range(i+1,maxjump+1):                	
				if(memo[j]==1):                    
					memo[i]=1                    
					break        
		if(memo[0]==1):            
			return True        
		else:            
			return False

害,这道题的代码也是醉了,跑到最后一个例子一直都是超时,无语无语。
2.第二题,题目如下:
在这里插入图片描述
解法的搬运工:
将数组中的区间按照起始位置排序
用curr数组记录当前合并的最大区间,遍历数组中的每一个区间,如果当前区间的起始位置小于curr的终点位置,则可以继续合并,所以合并并更新curr的起始和终止位置。如果当前区间的起始位置大于curr的终点位置,则无法合并。所以将curr加入到result里,并用当前的区间替换curr的值。
这道题还挺简单的,代码如下:

class Solution:    
	def merge(self, intervals: List[List[int]]) -> List[List[int]]:        
		def take1(elem):            
			return elem[0]        
		if len(intervals)<2:            
			return intervals        
		intervals.sort(key=take1)#将二维数组进行排序        
		curr=intervals[0]        
		result=[]        
		for i in intervals:            
			if curr[1]>=i[0]:                
				curr[1]=max(curr[1],i[1])            
			else:                
				result.append(curr)                
				curr=i        
		if len(curr)!=0:            
			result.append(curr)        
		return result
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章