题目

原创 2015年07月07日 00:12:04
Question 2. Find distance between two given keys of a Binary Tree, no parent pointers are given. Distance between two nodes is the minimum number of edges to be traversed to reach one node from other.
Assumptions:
There are no duplicate keys in the binary tree.

The given two keys are guaranteed to be in the binary tree.


struct Node{
    Node* left, *right;
    int val;
};
int Level(Node* root, Node* p){
    queue<Node*> q;
    q.push(root);
    int level=0;
    while(!q.empty()){
        int qsize=q.size();
        for(int i=0;i<qsize;i++){
            auto cur=q.front();q.pop();
            if(cur==p) return level;
            if(cur->left) q.push(cur->left);
            if(cur->right) q.push(cur->right);
        }
        level++;
    }
}
Node* LCA(Node* root, Node*p1, Node*p2){
    if(!root || root==p1 || root==p2) return root;
    Node* leftLCA=LCA(root->left, p1, p2);
    Node* rightLCA=LCA(root->right, p1, p2);
    if(leftLCA && rightLCA) return root;
    else if(leftLCA) return leftLCA;
    else if(rightLCA) return rightLCA;
    else return NULL;
}

int MinDis(Node* root, Node*p1, Node*p2){
    Node* lca=LCA(root, p1, p2);
    return Level(lca, p1)+Level(lca, p2);
}

LCA加层序遍历 时间ON


http://www.lintcode.com/en/problem/find-the-missing-number/


class Solution {
public:
    /**    
     * @param nums: a vector of integers
     * @return: an integer
     */
    int findMissing(vector<int> &a) {
        int n=a.size();
        for(int i=0;i<n;){
            if(a[i]!=i && a[i]<n){
                swap(a[i], a[a[i]]);
            }else{
                i++;
            }
        }
        for(int i=0;i<n;i++){
            if(a[i]!=i) return i;
        }
        return n;
    }
};

这种题目注意交换过来的数 可能还未处理,因此不能i++,而且可以保证不会出现死循环

这题代码

https://leetcode.com/problems/first-missing-positive/

class Solution {
public:
    int firstMissingPositive(vector<int>& a) {
        int n=a.size();
        for(int i=0;i<n;){
            if(0<=a[i]-1 && a[i]-1<n && i!=a[i]-1 && a[i]!=a[a[i]-1])
                swap(a[i], a[a[i]-1]);
            else i++;
        }
        for(int i=0;i<n;i++){
            if(a[i]!=i+1) return i+1;
        }
        return n+1;
    }
};

版权声明:本文为博主原创文章,未经博主允许不得转载。

经典程序题目

1:数组全排列: #include #include #include using namespace std; void swap( int *p, int *q) {     ...
  • wjd1994
  • wjd1994
  • 2018年01月23日 16:14
  • 48

c++题目整理

题1:   题2:   题3: 以下程序的输出是 class Base { public: Base(int j): i(j) {} virtual~...
  • xtzmm1215
  • xtzmm1215
  • 2015年07月18日 18:29
  • 2033

ACM推荐题目汇总

目前比较知名的两个ACM推荐题目集合: 一、 POJ推荐50题 1、标记“难”和“稍难”的题目可以看看,思考一下,不做要求,当然有能力的同学可以直接切掉。 2、标记为A and B的题目是比较...
  • lwtdzh999
  • lwtdzh999
  • 2016年03月07日 21:40
  • 1293

一些有趣的题目(整理版)

据说是Google的面试题目 ...
  • Minus8cool
  • Minus8cool
  • 2006年03月14日 21:30
  • 2324

常见的链表题目

1.单链表的反序//逆转链表,并返回逆转后的头节点 node* reverse(node *head) { node *cur = head; node *pre = NULL...
  • hairetz
  • hairetz
  • 2010年08月25日 11:46
  • 10309

【九度】题目1201:二叉排序树

时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6443 解决:2718 题目描述:     输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。 输入:   ...
  • qq_24573717
  • qq_24573717
  • 2017年01月10日 21:17
  • 206

2018美国数学建模MCM A题翻译:Problem A: Multi-hop HF Radio Propagation

背景:在高频(HF,定义为3 - 30 mHz),无线电波可以通过离开电离层和离开地球的多次反射而行进很长距离(从地球表面上的一个点到地球表面上的另一个远点) 。对于低于最大可用频率(MUF)的频...
  • bat67
  • bat67
  • 2018年01月20日 09:37
  • 3049

题目1 : 传话游戏

题目1 : 传话游戏 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 Alice和Bob还有其他几位好朋友在一起玩传话游戏...
  • zxdfc
  • zxdfc
  • 2014年04月07日 21:13
  • 1720

递归几种题目

常见的递归题目有:求阶乘、斐波那契数列、遍历文件夹等,今天先总结这么多,以后再加。 package com.zhou; import java.io.File; /** * 递归题目 * ...
  • zj_133
  • zj_133
  • 2012年06月07日 09:44
  • 863

史上最全计算机毕业设计题目4(10万套,大部分全国唯一)

asp公司网站建设(全套) 在线考试制卷系统(任务书,论文,源码) net小型证券术语解释及翻译系统的设计与开发(源码,论文) 原创vf员工培训管理系统(任务书,论文) asp科研信息管理系统...
  • QQ_312783267
  • QQ_312783267
  • 2014年03月02日 16:51
  • 4485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:题目
举报原因:
原因补充:

(最多只允许输入30个字)