华为OD机试

#华为机试#
求助:华为机试最后一题
给一副牌,数字从0-9,有r(红色), g(绿***(蓝色),y(黄色),每次打出的牌必须跟上一张数字或者颜色相同,求最大打牌次数。
输入两个数组,第一个数组表示数字,第二个数组表示颜色。
如,输入:
    1 4 3 4 5
    r y b b r
输出:3
如果打(1, r)-> (5, r),那么能打两张。
如果打(4,y) -> (4, b) -> (3, b),那么能打三张。

求解,主要是没思路,感觉要用贪心或者动态规划,但是不知道局部最优是什么,也写不出来状态转移,请各位大佬赐教。
#华为笔试##笔试题目#
全部评论
这个和亲戚问题有点类似,是并查集吗?并查集的介绍可以看这里:https://zhuanlan.zhihu.com/p/93647900/
2
送花
回复
分享
发布于 2022-04-07 14:27
感觉可以直接dfs,不知道会不会超时😂
1
送花
回复
分享
发布于 2022-04-23 23:32
秋招专场
校招火热招聘中
官网直投
一开始觉得并查集可以,但是想了想还是觉得存在问题,如果一张牌连接两个不同的颜色,那么可能会多算,正确的做法,应该就是建图,计算图的最长路径即可
1
送花
回复
分享
发布于 2022-04-11 11:09
a = '143****85474344' b = &(17160)#39;rybbrbdxsqb' countlist1 = [] countlist2 = [] result = 0 for i in a: n1 = a.count(i) countlist1.append((i,n1)) countlistcp = list(set(countlist1)) lastnum = sorted(countlistcp,key=lambda x: x[1]) maxnum = int(lastnum[-1][1]) for i in b: n2 = b.count(i) countlist2.append((i,n2)) countlistcp = list(set(countlist2)) lastcolor = sorted(countlistcp,key=lambda x: x[1]) maxcolor = int(lastcolor[-1][1]) if maxnum ==0 and maxcolor ==0: result = 1 lastlist = [] if maxnum >= maxcolor:  if len(b) > (maxnum+maxcolor-1): result = maxnum+maxcolor-1 print result else: result = len(b) print result else: if len(a) > (maxnum+maxcolor-1): result = maxnum+maxcolor-1 print result else: result = len(a) print result
1
送花
回复
分享
发布于 2022-04-23 00:46
如果牌a下一张可以打b, 那么连一条a到b的无向边,求这些联通块的直径的最大值,相当于求树的直径,方法是任选一点a,找出距离这个点最远的一个点b,再求b点与其他点的最远距离,就是直径
点赞
送花
回复
分享
发布于 2022-04-21 22:01
栈觉得栈可以实现
点赞
送花
回复
分享
发布于 2022-05-11 11:32
Dfs类似全排列,应该可以吧,就是复杂度高
点赞
送花
回复
分享
发布于 2022-05-17 15:28
def func():     nums = input().split(" ")     color = input().split(" ")     dicts = {}     for a, b in zip(nums, color):         if dicts.get(a):             dicts[a].append(b)         else:             dicts[a] = [b]         if dicts.get(b):             dicts[b].append(a)         else:             dicts[b] = [a]     def fun(key, lasts):         long = 0         for val in dicts[key]:             if [val, key] not in lasts and [key, val] not in lasts:  # 防止环,[4,b]—[b,3]—[3,r]—[r,4]                 long = max(long, fun(val, lasts + [[key, val]]) + 1)         return long     res = 0     for i in dicts.keys():         res = max(res, fun(i, []))     print(res) func() 不知道有多少的通过率
点赞
送花
回复
分享
发布于 2022-06-28 10:46
每个都作为起点走一次深度遍历吧
点赞
送花
回复
分享
发布于 2022-09-07 21:23 湖南
class Node{ public int index ; public char color; public int value ; public int getIndex(){ return this.index; } } //用并查集 粗略的写了下代码
点赞
送花
回复
分享
发布于 2023-02-14 11:37 湖南

相关推荐

宇信外包 Java 7.5k
点赞 评论 收藏
转发
5 59 评论
分享
牛客网
牛客企业服务