京东笔试第四批笔试题解 8/31

T1

题意: 给定字符串s,找到与s长度相同,但是字典序比s大的最小字符串

模拟进位,全是z则无解,相当于一个26进制数+=1

O(n)

T2

给一个数组进行排序

操作一,选择下标i ,交换a[i],a[i+1]

操作二,选择下表i,使a[i],a[i+1],a[i+2],变成a[i+2],a[i+1],a[i]

发现操作二是对奇偶位置分开排序,那么对原数组进行排序,发现最后位置与自身初始位置奇偶结果不同则计数cnt+=1,操作一则是使一个错误的奇数位和错误的偶数位恢复正确奇偶性的位置,答案就是cnt/2

O(n)

T3

给定一个2xN的矩阵a,有两名玩家轮流移动棋子,玩家1希望最大化得分,玩家二希望最小化得分。

玩家一初始把棋子放在了1,1的位置上面,得分为走过路径所有格点的和。

数据范围

N<=1e5

-1e5<=a[i][j]<=1e5

dfs搜索状态,定义状态 dp[x][y][now][flag]为,当前位置在x行y列,同时轮到now进行操作,flag为能否上下移动的标志。

定义now==1需要最小化结果,now==0需要最大化结果,1先手(题目这里比较坑人,玩家1的先手用于走到初始位置了)

if(now==1)
{
	res=INF;
  //我是从0,0,走到1,n-1,如果你是1,1到2,n就y!=n
	if(y!=n-1){
		res=min(res,dfs(x,y+1,now^1,1)+a[x][y+1]);
	}
	if(flag){
		res=min(res,dfs(x,y^1,now^1,0)+a[x][y^1];
	}
}

需要注意的是我们得走到(2,n)这个位置,那么我们递归终止条件就是x==2,y==n

额外需要注意的就是在(1,n)这个位置不能往右走了

最大化的情况和最小化就是把min换成max

复杂度O(n*8)

#笔试##京东笔试#
全部评论
第一题这种思路为啥只过了75,java的,难道有特殊情况?
2 回复 分享
发布于 08-31 12:02 上海
5第三题我说怎么不对呢,原来第一步也算,这不逗么,我还最后还问监考说你这例题走错了哈哈😃
1 回复 分享
发布于 08-31 12:13 安徽
奇安信
校招火热招聘中
官网直投
草,第一手是走到初始位置,没注意到😭😭。要是我看了用例也该反应过来了,但我就是最后才看用例然后发现不对劲来不及了
点赞 回复 分享
发布于 08-31 12:09 上海
第三题,是不是每次考虑当前位置应该选周围没有走过且最大/最小的呢?
点赞 回复 分享
发布于 08-31 13:20 天津
大佬,第三题的复杂度O(n*8),你全部通过了吗。题目中n最大是多少啊。
点赞 回复 分享
发布于 08-31 15:12 广东

相关推荐

08-31 23:10
上海大学 后端
点赞 评论 收藏
分享
7 14 评论
分享
牛客网
牛客企业服务