9.4晚 字节前端笔试

有没有大哥帮忙看下代码啊为什么只过30%。然后就超时了不知道怎么优化了。测试用例也全过了的。
-1是钉子,珠子会左弹或者右弹,
1.第一种要素为钉子,当玩家的弹珠碰到钉子时,有可能会弹射到左下或者右下一格的位置。
2.第二种要素为得分点,当弹子经过得分点之后,可以获得得分点对应的分数。
如果当前格子不为钉子(即空白或者得分点)时,弹子会往正下方落下。
小M想知道,对于—个给定的版面,他最高可能获得多少分数。
输入
-1 0 -1
100 0 0
0 50 70
输出
50

var solutions = function(n,m,nums){
	let res = -Infinity
	var getway = function (left,right,last) { 
		// 跳出条件 到边界了
		if(left>=n){
			return 
		}else if(right>=m){
			return 
		}else if(right<0){
			return 
		}
		// 是-1吗 是的话两边进行递归
		if(nums[left][right]==-1){
			getway(left+1,right-1,last)
			getway(left+1,right+1,last)
			return 
		}
		if(last.length==0){
			// 刚从入口进来
// 			dp[left][right] = nums[left][right]>dp[left][right]?nums[left][right]:dp[left][right]
			dp[left][right] = nums[left][right]
		}else{
// 			dp[left][right] = (nums[left][right] + dp[last[0]][last[1]])>dp[left][right]?(nums[left][right] + dp[last[0]][last[1]]):dp[left][right]
			dp[left][right] = nums[left][right] + dp[last[0]][last[1]]
		}
		// dp完后更新 res
		res = dp[left][right]>res?dp[left][right]:res
		// 往下走
		getway(left+1,right,[left,right])
	}
	let dp = new Array(n).fill(0).map((e,i)=>new Array(m).fill(0))
    if(n==1&&m==1){
		return nums[0][0]
	}
	// 弹珠走的路
	// 先知道入口在哪
	for(let i=0;i<m;i++){
		if(nums[0][i] !=-1){
			dp[0][i] = nums[0][i]
			getway(0,i,[])
		}
	}
	return dp
}


#字节笔试##动态规划#
全部评论
老哥前端就2题吧,我看其他人都3,4题的我以为我做少了
点赞 回复 分享
发布于 2022-09-05 00:10 黑龙江
你这个是深度搜索,你这么想,就是有一个-1它左下角的那个位置其实有可能已经算过了,因为左下角那个数上面的数可能不是-1之前回溯的时候算过了,但是你又继续搜,就会重复速度慢。就不用深度搜索,直接从上往下遍历。
点赞 回复 分享
发布于 2022-09-04 23:18 辽宁
我是dp从最后一行往第一行遍历,最后从第一行取最大值
1 回复 分享
发布于 2022-09-05 06:43 澳大利亚

相关推荐

点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务