vivo笔试题(含答案)

总结不易,如果对你有帮助,请点赞关注支持一下
微信搜索程序dunk,关注公众号,定期分享Java笔试、面试题

编译依赖问题(90% -> AC)

一个完整的软件项目往往会包含很多由代码和文档组成的源文件。编译器在编译整个项目的时候,可能需要按照依赖关系来依次编译每个源文件。比如,A.cpp 依赖 B.cpp,那么在编译的时候,编译器需要先编译 B.cpp,才能再编译 A.cpp。 假设现有 0,1,2,3 四个文件,0号文件依赖1号文件,1号文件依赖2号文件,3号文件依赖1号文件,则源文件的编译顺序为 2,1,0,3 或 2,1,3,0。现给出文件依赖关系,如 1,2,-1,1,表示0号文件依赖1号文件,1号文件依赖2号文件,2号文件没有依赖,3号文件依赖1号文件。请补充完整程序,返回正确的编译顺序。注意如有同时可以编译多个文件的情况,按数字升序返回一种情况即可,比如前述案例输出为:2,1,0,3

输入例子1:

"1,2,-1,1"

输出例子1:

"2,1,0,3"

自己的做法

比较迷,看到这道题第一反应,这不是并查集吗,奥不对,并查集是只能找到最顶级的依赖,这个题明显不是这个意思,然后自己做了一个多叉树吧,应该叫字典树吧,每个节点保存当前信息和所有依赖它的节点信息,用一个list集合存放所有的顶级节点,最终dfs输出就行,只通过了90%

import java.util.*;


public class Solution {
   
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 编译顺序
     * @param input string字符串 
     * @return string字符串    
     */
    StringBuilder builder = new StringBuilder();
    public String compileSeq (String input) {
   
        // write code here
        Map<Integer, DependTree> map = new HashMap();
        List<Integer> res = new ArrayList<>();
        String[] depends = input.split(",");
        for (int i = 0; i < depends.length; i++) {
   
            int child = i;
            int parent = Integer.parseInt(depends[i]);
            if (parent == -1) {
   
                res.add(child);
                if (!map.containsKey(child))
                    map.put(child, new DependTree(child));
                continue;
            }
            if (map.containsKey(parent)) {
   
                DependTree PT = map.get(parent);
                DependTree CP = null;
                if (map.containsKey(child)) {
   
                     CP = map.get(child);
                } else {
   
                    CP = new DependTree(child);
                    map.put(child, CP);
                }
                PT.child.add(CP);
            } else {
   
                DependTree PT = new DependTree(parent);
                map.put(parent, PT);
                DependTree CP = null;
                if (map.containsKey(child)) {
   
                    CP = map.get(child);
                } else {
   
                    CP = new DependTree(child);
                    map.put(child, CP);
                }
                PT.child.add(CP);
            }
        }
        for (int i = 0; i < res.size(); i++) {
   
            dfs(map.get(res.get(i)));
        }
        return builder.toString().substring(0, builder.length() - 1);
    }
    
    private void dfs(DependTree dependTree) {
   
        builder.append(dependTree.val + ",");
        for(DependTree sub : dependTree.child) {
   
            dfs(sub);
        }
    }
}
    class DependTree {
   
    public int val;
    public List<DependTree> child = new ArrayList<>();
    public DependTree(int val) {
   
        this.val = val;
    }
}

分析一下错误

您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为90.00%

用例:
“8,2,7,4,6,-1,5,5,6”

对应输出应该为:

“5,6,4,3,7,2,1,8,0”

你的输出为:

“5,6,4,3,8,0,7,2,1”

画一下依赖树

image-20210605134040163

发现问题,没有满足按数字升序返回一种情况即可

改进(AC)

使用优先队列

import java.util.*;
public class Solution {
   
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 编译顺序
     * @param input string字符串
     * @return string字符串
     */
    StringBuilder builder = new StringBuilder();
    public String compileSeq (String input) {
   
        // write code here
        Map<Integer, DependTree> map = new HashMap();
        List<Integer> res = new ArrayList<>();
        String[<
  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
vivo芯片图像算法笔试题主要是针对图像处理与识别领域的问题。以下是一个可能的回答: vivo芯片图像算法笔试题通常涉及一些图像处理与识别的技术和方法。这些问题旨在考察我们对于图像算法的理解和应用能力。 例如,可能会涉及到图像处理方面的问题,比如如何去噪、如何进行图像平滑处理等。针对这些问题,我们可以选择适当的算法,比如使用高斯滤波器对图像进行平滑处理,或者应用中值滤波器去噪声。 此外,vivo芯片图像算法笔试题还可能涉及到图像识别方面的问题,比如如何进行物体检测和识别。对于这类问题,我们可以使用传统的机器学习算法,如支持向量机(SVM)或随机森林(Random Forest),与深度学习算法,如卷积神经网络(CNN)相结合,从而实现准确的物体检测和识别。 在回答vivo芯片图像算法笔试题时,我们需要结合实际问题进行思考和分析。还需要展现我们对于图像处理与识别算法的理解和应用能力。我们可以通过提供具体的解决方案、算法选择和优化等来展示我们在这一领域的专业知识和经验。 总之,vivo芯片图像算法笔试题是一个综合考察我们在图像处理与识别领域知识和能力的考题。我们需要结合实际问题,选择合适的算法和技术,提供具体的解决方案,并展示我们在该领域的专业知识和经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值