两棵树

两棵树的问题

http://www.nowcoder.com/questionTerminal/ae592e8b25f041b28dbc27b986441085

这题我超时了,思路应该 是对滴,本地用例通过了。

class Solution {
public:
    /**
     * 
     * @param n int整型 
     * @param a int整型一维数组 
     * @param aLen int a数组长度
     * @param b int整型一维数组 
     * @param bLen int b数组长度
     * @param c int整型一维数组 
     * @param cLen int c数组长度
     * @return int整型
     */
    //在树中找到每个节点的路径,对路径进行比较
   int findLength(int first, int second, int* a, int aLen) {
         int tmp = first;
         if (first == 0)
                return 0;
       //存储节点1的路径
        std::vector<int> dp;
        while (first != 0) {
        if (a[first] != 0 && a[first] != second)
        {
            first = a[first];
            dp.push_back(first);

        }
        else {
                if (a[first] == second)
                    return 0;
                else
                    if (a[first] == 0)
                        break;
            }
        }
        dp.push_back(0);
       //存储节点2的路径
        std::vector<int> dp1;
        while (second != 0) {
            if (a[second] != 0 && a[second] != tmp) {
                second = a[second];
                dp1.push_back(second);
            }
            else {
                if (a[second] == tmp)
                    return 0;
                else
                if (a[second] == 0)
                    break;
            }
        }
        dp1.push_back(0);
       //计算公共节点的深度
        int result = -1;
        int start = dp.size() - 1;
        int start1 = dp1.size() - 1;
        while (start >= 0 && start1 >= 0&&dp[start] == dp1[start1]) {
            result += 1;
            start -= 1;
            start1 -= 1;
           }
        return result;
    }
    int wwork(int n, int* a, int aLen, int* b, int bLen, int* c, int cLen) {
        // write code here
        //a数组是用来对b数组编号进行映射,可以在c中找到对应的编号。
        // b中为2 3编号的节点,对应a的编号为a[2]=1,a[3]=3,也就是说在c中找到这两个编号即
        //c[1],c[3]
        //超时了,你们可以优化下,我本地通过。
        int result = 0;
        for(int i=1;i<n;++i){
            for(int j=i+1;j<=n;++j){
                int tmp = findLength(i,j,b,bLen);
                int first = a[i];
                int second = a[j];
                tmp += findLength(first,second,c,cLen);
                if(tmp>result)
                    result = tmp;
            }
        }
        return result;
    }
};
全部评论

相关推荐

有很多问题,求大佬们解答,谢谢大佬们:不知道现在该怎么投实习,该怎么准备内心很纠结学校课程和实习到底怎么选择,&nbsp;自己也不想课程学业这边出问题,&nbsp;是不是只能投暑期实习,具体时间该怎么安排前端面试也需要准备算法么,&nbsp;自己的算法能力很薄弱,&nbsp;面试题需要准备到什么程度?没有ai项目经验的话,我该如何去补充,如何去找好的ai项目
smile丶snow:1.简历尽量一页,比如教育经历那里,全日制,计算机学院这些可以去掉没啥用好浪费空间。 熟悉三件套就没必要写了吧。js基本上是这样写 * JavaScript核心:深入理解 JS 运行机制(事件循环 Event Loop、微任务/宏任务),熟练掌握 Promise/Async 异步编程 模型。 熟悉可以改成熟练掌握。组件库写一个ant感觉就行,多写了浪费空间。 旅游项目是不是jonas的natours啊,我之前简历也有这个。我之前是这样写的 全栈思维: 熟悉 Node.js/Express 后端架构,掌握 MongoDB 数据库设计与聚合查询 工程化我觉得还是少些吧,不写就问的少,如果你真的了解的话可以写。 1.实习的话推荐大厂官网和aoob上面投,我自己有写一个校招网站的小网站可以直达~github主页上面有,顺便求个关注( 2.大三下一般课程比较少了吧,如果学校比较严的话可以多沉淀一会,如果不太严可以请dai课然后去实习,尽量找个近一些的就行。暑期实习不是暑假才实习哦,基本是上3月底4月初发offer就可以过去了,然后大概暑假的时候走转正流程答辩。 3.大厂算法题+js手写体。hot100+常见的比如数组转树,Promise.all,deepClone,之类 js手写都不难其实。算法看自己能力吧,我其实算法能力也不行。 4.自己平时没有用AI Coding吗?自己想一下怎么让AI帮你更好的写代码~比如Skill的诞生,OpenSpec的诞生,不都是我们想让AI更好帮我们写代码吗。
我的实习日记
点赞 评论 收藏
分享
找工作勤劳小蜜蜂:自我描述部分太差,完全看不出想从事什么行业什么岗位,也看不出想在哪个地区发展,这样 会让HR很犹豫,从而把你简历否决掉。现在企业都很注重员工稳定性和专注性,特别对于热爱本行业的员工。 你实习的工作又太传统的it开发(老旧),这部分公司已经趋于被淘汰,新兴的互联网服务业,比如物流,电商,新传媒,游戏开发和传统的It开发有天然区别。不是说传统It开发不行,而是就业岗位太少,基本趋于饱和,很多老骨头还能坚持,不需要新血液。 工作区域(比如长三角,珠三角,成渝)等也是HR考虑的因素之一,也是要你有个坚定的决心。否则去几天,人跑了,HR会被用人单位骂死。
点赞 评论 收藏
分享
评论
2
1
分享

创作者周榜

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