4.11网易互娱-计算机视觉实习岗笔试

先说情况,四道编程题分别是ac,40%,0,ac 。
第一题:没有什么算法,按照正常思路,先写整数相加函数,如果是小数把小数变成整数,注意补零对齐,再将结果放小数点就可以了。
第二题:先排序,工人和任务从大到小排,对于第i个任务,能够胜任的工人数是j,则可以安排的种树有j-i种,减i是因为前面task已经安排了i个工人,这i个工人肯定是能够胜任第i个任务的。那么遍历一遍任务,按每个任务的安排个数连乘,即为答案。无奈考完才想到这个方法。40%是递归做的。
第三题:这道题有点复杂,做题时先跳过了。现在想想,应该跟数独一样,先确定每一个玩家可以组队的人,然后根据限制条件去得出答案。具体思路还没有,期待大神解答一下。更新:https://www.nowcoder.com/discuss/405871,看到上面的链接,也是数独的思路。不过我看到他直接使用两个库,暴力枚举,由于数据大小是7*7,也ac了,这也行!
第四题:深度优先遍历森林。把小盒子当做根节点,先寻找每个盒子的孩子(即那些长宽高比该盒子大的盒子),最小的盒子是根节点。因为盒子可能不是任何一个盒子的孩子,所以可能有多个根节点,所以是深度遍历森林。
应评论贴下第四题参考python代码:
class Solution:

    def is_bigger(self, box1,box2):
        if box1[0] > box2[0] and box1[1] > box2[1] and box1[2] > box2[2]:
            return True
        return False

    #以box当做节点深度遍历
    def dfs(self,box,cnt):
        if len(self.d[box]) == 0:
            # 更新最大深度
            self.max_cnt = max(self.max_cnt,cnt)
        for box in self.d[box]:
            # 如果box已经被访问了,说明是该box孩子的子孙,肯定深度没有之前大(该节点->孙子 小于 该节点->孩子->孩子)
            # 所以不用访问了
            if self.visit[box] == False:
                self.visit[box] = True
                self.dfs(box,cnt+1)

    def maxBoxes(self, boxes):
        # write code here
        boxes = [(x[0], x[1], x[2]) for x in boxes]
        boxes = sorted(boxes, key=lambda x: x[0] * x[1] * x[2])
        import collections
        # d是记录每个box的孩子
        self.d = collections.defaultdict(list)
        box_cnt = len(boxes)
        # roots记录森林的根节点
        self.roots = [x for x in boxes]
        for i in range(box_cnt):
            for j in range(i + 1, box_cnt):
                if self.is_bigger(boxes[j], boxes[i]):
                    self.d[boxes[i]].append(boxes[j])
                    if boxes[j] in self.roots:
                        self.roots.remove(boxes[j])
        self.max_cnt = 1
        # visit作用见dfs函数
        self.visit = dict()
        for root in self.roots:
            # 每次遍历树,都要把所有节点置为未访问
            for i in range(box_cnt):
                self.visit[boxes[i]] = False
            self.root = root
            self.dfs(root, 1)
        return self.max_cnt

s = Solution()
boxes = [[5,4,3], [5,4,5], [6,6,6]]
print(s.maxBoxes(boxes))



没有论文找算法岗太难了,希望能给个面试机会QAQ
#网易互娱笔试##网易互娱##笔试题目##计算机视觉岗#
全部评论
想问一下楼主,你的计算机视觉岗base在哪里呀,因为我没找到就直接投了上海的ai工程师了orz
点赞 回复 分享
发布于 2020-04-12 15:25
100 80 0 100 第二题用排完序之后 挨个算每个工人能够完成的工作数量 得到一个数组work 然后对这个数组遍历一次res*=(work[i]-i) 可以得到正确解 但是只能过80% 会超时
点赞 回复 分享
发布于 2020-04-11 23:25
第四题排序完就是一个最长上升子序列吧,但是只过了90%
点赞 回复 分享
发布于 2020-04-11 23:12
能贴一下第四题的代码吗
点赞 回复 分享
发布于 2020-04-11 22:27

相关推荐

用微笑面对困难:只要你保证项目和获奖都是真的就行尤其是“对战,总负责人”啊这些套职,基本上队员,打杂的都这么写
点赞 评论 收藏
分享
评论
1
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务