• 百度面试题


    百度二面
    第一题,任意给一个数,试证明这个数的某个倍数的十进制表示是01串,比如3的倍数111是二进制表示,5的倍数10是二进制表示,等等。

    解答:
    假设序列1,11,111,1111…用A1~AN标识,下脚标N即为1的个数,如:A1=1,A2=11,A3=111…
    其中没有一个是N的倍数,即AK mod N不等于0(K属于1~N),并且AK mod N的余数各不相同,设它们为a1,a2,a3,…,aN,但AK mod N的余数最多只有N-1个不同,则由鸽巢原理可知,a1,a2,a3,…,aN中必有两个相同,即ai=aj(j>i),则Aj-Ai=0(mod N),Aj-Ai即为所求的0和1组成的十进制数M,得证。


    第二题,素数有无穷多个,请问是怎么证明的。

    解答:
    假若素数只有有限多个,设最大的一个是P,从2到P的全体素数是:
    2,3,5,7,11……,P。
    所有的素数都在这里,此外再没有别的素数了。
    现在,我们来考察上面从2到P的全体素数相乘、再加上1这个数,设它是A,即
    A=2×3×5×7×11×……×P+1。
    A是一个大于1的正整数,它不是素数,就是合数。
    如果A是素数,那么,就得到了一个比素数P还要大的素数,这与素数P是最大素数的假设矛盾。
    如果A是合数,那么,它一定能够被某个素数整除,设它能被g整除。
    因为A被从2到P的任何一个素数除,余数都是1,就是都不能整除,而素数g是能整除A的,所以素数g不在从2到P的全体素数之中。这说明素数g是一个比素数P更大的素数,这又与P是最大的素数的假设矛盾。
    上面的证明否定了素数只有有限多个的假定,这就证明了素数是无穷多个。


    第三题,给一个很大的数组,里面有两个数只出现过一次,其他数都出现过两次,把这两个数找出来。


    解答:
      假设这两个数为a,b,将数组中所有元素异或结果是x=a^b,判断x中位为1的位数(注:因为a!=b,所以x!=0,我们只需知道某一个位为1的位数k,例如0010 1100,我们可取k=2或者3,或者5),然后将x与数组中第k位为1的数进行异或,异或结果就是a,b中一个,然后用x异或,就可以求出另外一个。
      为什么呢?因为x中第k位为1表示a或b中有一个数的第k位也为1,假设为a,我们将x与数组中第k位为1的数进行异或时,也就是将x与a外加上其他第k位为1的出现过偶数次的数进行异或,化简即为x与a异或,结果是b。

      C++代码如下:

    #include <iostream>
    #include <cstdlib>                         
    using namespace std;
    void getNum(int a[],int N){
        int s=0;
        for(int i=0;i<N;i++)
            s^=a[i];
        int tmp1=s,tmp2=s;
        int k=0;
        int j=0;
        while((tmp1&0x1)==0){
            tmp1>>=1;
            k++;
        }   
        for(int i=0;i<N;i++){
            if((a[i]>>k)&1)
                s^=a[i];
        }       
        cout<<s<<' '<<(s^tmp2)<<endl;
    }   
    int main(){
        const int N=162;
       int a[N];  
       for(int i=0;i<(N-2)/2;i++)
           a[i]=i+1;       
       for(int i=(N-2)/2;i<N-2;i++)
           a[i]=a[i-(N-2)/2];
       a[N-2]=100;
       a[N-1]=101;
       getNum(a,N);
    }

    第四题,把一个链表逆过来,要求空间复杂度O(1),这个算简单的。

  • 相关阅读:
    Spring Boot → 08:嵌入式Servlet容器自定义
    Spring Boot → 09:使用外置Servlet容器_tomcat9.0
    Spring Boot → 07:错误处理机制
    Spring Boot → 06:项目实战-账单管理系统
    Spring Boot → 05:Web开发
    zzz Objective-C的消息传递机制
    Objective-C中的SEL、IMP和Class类型(转)
    zzzObjective-C的动态特性
    zzz KVC/KVO原理详解及编程指南
    zzzzz iOS绘图教程
  • 原文地址:https://www.cnblogs.com/xkfz007/p/2767039.html
Copyright © 2020-2023  润新知