4.13 阿里笔试第一题

小动物投票那个题,一开始想错了然后做了一个小时gg,后来交卷前三分钟想到哪错了
唉每次都会读错题,然后我考完试自己写了一下,每个小动物都用dfs求连通,然后visited记录是否被访问,每次新的小动物的visited都要重置。
测试了自己想的几个用例好像都是对的,
比如:
小动物崇拜列表:
[0,1,1,2,3,4]
输出:
[6, 3, 2, 2, 1, 1]
想找ac的大佬帮我看看有没有错误
阿里与俺无缘了
def solve(n,a):
    res = []
    a.insert(0,0)
    for i in range(1,n+1):
        visited = [False]*(n+1)
        tmpcount =1
        tmpcount+= dfs(i,visited,n,tmpcount)
        res.append(tmpcount)
    return res

def dfs(i,visited,n,count):
    print(count)
    tcount =0
    for j in range(i+1,n+1):
        if a[j]==i and not visited[j]:
            #往下找还有么
            visited[j] = True
            tcount+= dfs(j,visited,n,count)+1
    return tcount



a = [0,1,1,2,3,4]
n =6
res = solve(n,a)
print(res)


#阿里巴巴##笔试题目#
全部评论
你还是没读懂题目,题目说每个小动物只会投票给它能力值高的,能力值按输入顺序从高到低(但不需要给出),所以投票图是树状的,不会有环,所以也不需要dfs和visited,从后到前累加就行了= = 我也没看清题,没看到能力值从高到低,还以为要写拓扑排序,然后没来得及。。。。。从前向后一个个加只有90%,所以你这个对了也拿不满。
点赞 回复 分享
发布于 2020-04-14 04:37
放心,有没有面试和这个没啥关系,我笔试0分,自己本来都放弃了,做天做完第三天突然接到电话
点赞 回复 分享
发布于 2020-04-14 08:33
从后到前累加就行,比如n投给自己,他的对象投给1,那么1就会收到n和n的对象两张票
点赞 回复 分享
发布于 2020-04-14 08:40
没读懂题,过了%10,我下来有想了下,测试用例能过但是题意还是很多疑问,我贴代码 #include<iostream> using namespace std; int main() { int n; cin >> n; int *p = new int[n](); int *res = new int[n]; for (int i = 0; i < n;++i) { cin >> p[i]; res[i] = 1; } for (int j = 0; j < n; ++j) { if (p[j] != 0) { res[p[j]-1] += 1; } } for (int k = 0; k < n; ++k) { cout << res[k] << " "; } return 0; } 有大佬过了的指正一下
点赞 回复 分享
发布于 2020-04-14 11:04
 你这 时间复杂度 也不对啊   。  O(n^2)的复杂度超时了,  你可以用个  数组 记录啊 ,  可以变成线性
点赞 回复 分享
发布于 2020-04-14 18:23
我是用动态规划做的,开辟一个数组,初值都是1,相当于每个动物自己投给自己,然后从后向前遍历崇拜对象数组,每一次都在当前崇拜对象的结果上加上当前小动物的票数,AC了。
点赞 回复 分享
发布于 2020-04-18 13:15

相关推荐

去B座二楼砸水泥地:不过也可以理解,这种应该没参加过秋招
点赞 评论 收藏
分享
粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
点赞 5 评论
分享
牛客网
牛客企业服务