zoukankan      html  css  js  c++  java
  • 算法面试(2)

    第24题:
    链表操作,
    (1).单链表就地逆置,
    (2)合并链表

    想法:这样可以吗>_<。没有经过调式的

    struct node
    {
        int val ;
        node *next ;
    };
    void reverse(node *&head)
    {
        node *o , p ;
        o=NULL ;
        while(head->next != NULL)
        {
            p  = head->next ;
            head->next = o ;
            o = head ;
            head = p ;
            if(p->next == NULL) return ;
        }
    }
    

      

    第23题:
    用最简单, 最快速的方法计算出下面这个圆形是否和正方形相交。"
    3D坐标系 原点(0.0,0.0,0.0)
    圆形:
    半径r = 3.0
    圆心o = (*.*, 0.0, *.*)

    正方形:
    4个角坐标;
    1:(*.*, 0.0, *.*)
    2:(*.*, 0.0, *.*)
    3:(*.*, 0.0, *.*)
    4:(*.*, 0.0, *.*)

    想法:y坐标都是0 0 ,也就是二维平面上了,判断圆心到四条边的距离,都小于 r 或者都大于 r 就是不相交

    第22题:
    有4张红色的牌和4张蓝色的牌,主持人先拿任意两张,再分别在A、B、C三人额头上贴任意两张牌,
    A、B、C三人都可以看见其余两人额头上的牌,看完后让他们猜自己额头上是什么颜色的牌,
    A说不知道,B说不知道,C说不知道,然后A说知道了。
    请教如何推理,A是怎么知道的。
    如果用程序,又怎么实现呢?


    第21题
    2010年中兴面试题
    编程求解:
    输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数,
    使其和等于 m ,要求将其中所有的可能组合列出来.

    想法:dfs,加上一些剪支处理,复杂度o(2^n),


    第20题:
    题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。
    例如输入字符串"345",则输出整数345。

    想法:写写就可以了,简单

    第19题:
    题目:定义Fibonacci数列如下:
    / 0 n=0
    f(n)= 1 n=1
    f(n-1)+f(n-2) n=2

    输入n,用最快的方法求该数列的第n项。
    分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。
    因此很多程序员对这道题的递归解法非常熟悉,但....呵呵,你知道的。。

    想法:Fibonacci数列有公式来着,还有可以用矩阵快速幂加速 

    f[n] = a*f[n-1]+b*f[n-2] 是可以表示成矩阵形式的

    第18题:
    题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,
    每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
    当一个数字删除后,从被删除数字的下一个继续删除第m个数字。
    求出在这个圆圈中剩下的最后一个数字。
    July:我想,这个题目,不少人已经 见识过了。

    想法:除了用链表直接模拟,还有更快的解法?

    第17题:
    题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 
    分析:这道题是2006年google的一道笔试题。

    想法:扫两次吧,第一次记录个数,第二次出结果。

    第16题:
    题目(微软):
    输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
    例如输入
    8
    /
    6 10
    / /
    5 7 9 11

    输出8 6 10 5 7 9 11。

    想法:可以用队列搞

    struct node
    {
        int val ;
        node*ch[2] ;
    };
    queue<node*>q ;
    void dfs(node*o)
    {
        q.push(o);
        while(!q.empty())
        {
            node *p = q.front();q.pop();
            cout << p->val << " " ;
            if(p->ch[0] != NULL) q.push(p->ch[0]) ;
            if(p->ch[1] != NULL) q.push(p->ch[1]) ;
        }
        puts("") ;
    }
    

      

    第15题:
    题目:输入一颗二元查找树,将该树转换为它的镜像,
    即在转换后的二元查找树中,左子树的结点都大于右子树的结点。
    用递归和循环两种方法完成树的镜像转换。
    例如输入:
    8
    /
    6 10
    / /
    5 7 9 11

    输出:
    8
    /
    10 6
    / /
    11 9 7 5

    定义二元查找树的结点为:
    struct BSTreeNode // a node in the binary search tree (BST)
    {
    int m_nValue; // value of node
    BSTreeNode *m_pLeft; // left child of node
    BSTreeNode *m_pRight; // right child of node
    };

    想法:不懂这样对不对==

    struct BSTreeNode // a node in the binary search tree (BST)
    {
       int m_nValue; // value of node
       BSTreeNode *m_pLeft; // left child of node
       BSTreeNode *m_pRight; // right child of node
    };
    void dfs(BSTreeNode *o)
    {
        if(o==NULL) return ;
        swap(o->m_pLeft,o->m_pRight) ;
        dfs(o->m_pLeft) ;
        dfs(o->m_pRight) ;
    }
    

      

    第14题:
    题目:输入一个已经按升序排序过的数组和一个数字,
    在数组中查找两个数,使得它们的和正好是输入的那个数字。
    要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。
    例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。

    想法:大概这样

    void find(int a[],int n ,int x,int &ans1,int &ans2)
    {
        int L,R;
        L=1;R=n;
        while(L<R)
        {
            if(a[L]+a[R]==x) 
            {
                ans1=a[L] ;
                ans2=a[R] ;
                return ;
            }
            else if(a[L]+a[R] > x )R-- ;
            else L++;
        }
    }
    

      

    第13题:
    题目:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
    链表结点定义如下:
    struct ListNode
    {
    int m_nKey;
    ListNode* m_pNext;
    };

  • 相关阅读:
    字典-dict
    队列-deque
    with-as 语句
    odoo 在"动作"("Action")菜单中添加子菜单, 点击子菜单弹窗自定义form
    odoo onchange readonly
    pyhton 连接 oracle
    PyCharm WSL 配置
    docker 安装 oracle
    docker 安装 mssql
    odoo =like
  • 原文地址:https://www.cnblogs.com/20120125llcai/p/3887402.html
Copyright © 2011-2022 走看看