陌陌笔试-Java研发工程师(商业化)

1.构建图使用递归和回溯实现最长路径
通过100%
public class Solution {
    public String LongestBehaviorPath (String[] paths) {
    
        Map<String,List<String>> graph = new HashMap<>();
        Map<String,Integer> indegree = new HashMap<>();
        for(String path : paths){
            String []steps = path.split(&quot;->&quot;);
            for(int i = 0;i<steps.length-1;i++){
                graph.putIfAbsent(steps[i],new ArrayList<>());
                graph.get(steps[i]).add(steps[i+1]);
                indegree.put(steps[i+1],indegree.getOrDefault(steps[i+1],0)+1);
                indegree.putIfAbsent(steps[i],0);
            }
        }

        List<String> startNodes = new ArrayList<>();
        for(String node:indegree.keySet()){
            if(indegree.get(node) == 0){
                startNodes.add(node);
            }
        }

        List<String> longestPath = new ArrayList<>();

        for(String start : startNodes){
            dfs(start,new ArrayList<>(),graph,longestPath);
        }

       return String.join(&quot;->&quot;,longestPath); 
    }

    private static void dfs(String node,List<String> path,Map<String,List<String>> graph,List<String> longestPath){
        path.add(node);
        if(path.size()> longestPath.size()){
            longestPath.clear();
            longestPath.addAll(new ArrayList<>(path));
        }

        if(graph.containsKey(node)){
            for(String neighbor: graph.get(node)){
                dfs(neighbor,path,graph,longestPath);
            }
        }

        path.remove(path.size() - 1);

    }
}

2.求逆值对
双重for循环遍历比较
通过100%
全部评论
双重for都能解决吗
点赞 回复 分享
发布于 2024-09-06 20:43 山东
我也这题,感觉好简单😅
点赞 回复 分享
发布于 2024-09-06 20:18 安徽

相关推荐

08-12 23:18
中山大学 C++
笔试2题只a了一题,竟然过了。一面面试官感觉挺年轻的,很好人。面了一个半小时,总体上是提出问题后不断深挖1、给了一个结构体,问大小,各成员的首地址2、怎么修改可以减少总大小3、通过什么方法可以修改对齐的规则(这个不知道)4、那我现在想要压缩这个结构体,只使用15字节(成员总大小)的空间要怎么放针对这个问题让我写一下伪代码,我的思路用一个int8数组存,把大于一个字节的成员转成int8数组格式,然后分别放进数组里。然后根据我的代码连续问了好几个问题,最后一个是:uint8_t&nbsp;array[15],把一个double&nbsp;num存进去,让其放在array下标1-8的位置。这个问题没答上来,面试官就作出了解答5、struct&nbsp;alignas,加上这个原结构体的size是多少6、介绍一下虚拟内存7、从虚拟地址到物理地址的具体寻址过程,比如cpu干了什么8、内存分页是为了解决什么问题9、介绍一下三次握手10、第三次握手发的ACK是为了回应什么?(第二次握手中的SYN)11、介绍一下四次挥手12、为什么第四次挥手要等待这么长的时间,这样设计是为了什么13、连接完成后,假如client突然掉了,且此时网络中没有任何数据收发,那么server可以通过协议栈的方法得知client挂了吗?这里不是很熟,我说感觉server应该不知道。然后问那么通过怎么样的方法可以让server知道,这时突然想到keep-alive就提了一下,面试官说他的查询间隔是多少,会不会有点长(这里具体的间隔是多少主播不懂)让我设计一个方法的话会怎么设计。我就联想到一秒有多少帧,可以就按这个频率发送检测,如果send()和recv()正常就代表连接正常14、如果server开启listen()状态后突然挂了,然后直接重启服务器代码的话会出现什么错误?怎么避免?15、介绍一下IO多路复用的select、poll、epoll。把之前看的东西都说了一下,然后也继续问多了几个问题,只记得一个这三个哪个能用在windows上16、问python的问题,问知道GIL吗?(我说不知道,对python的细节不是很熟,只是会用python做科研项目,面试官就没继续拷打了)17、时间到50min的时候,说出个代码题,说说思路就好。让实现Timer和TimerManager。后面查了一下才知道这个是比较高频的考点,但是完全没接触过(一开始还以为是实现一个计时的秒表),不过面试官会全程引导,我一开始说完思路后面试官会抛出一些问题指引我要使用什么数据结构、联想一下前面说的多路复用等等18、这里说了20多分钟,最后让我介绍一下之前实习的项目,讲了10min左右19、反问总体来说问的挺多的,有些问题我就说不熟悉然后猜了一下,面试官会问为什么这样猜,或者加以引导
查看21道真题和解析
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

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