zoukankan      html  css  js  c++  java
  • 找出被修改过的数字

    题目:

    n个空间(其中n<1M),存放a到a+n-1的数,位置随机且数字不重复,a为正且未知。现在第一个空间的数被误设置为-1。已经知道被修改的数不是最小的。请找出被修改的数字是多少。
    例如:n=6,a=2,原始的串为5, 3, 7, 6, 2, 4。现在被别人修改为-1, 3, 7, 6, 2, 4。现在希望找到5。

    第1种方法:

    由于修改的数不是最小的,所以遍历第二个空间到最后一个空间可以得到a的值。
    a 到 a+n-1这 n个数的和是 total = na + (n - 1)n/2。
    将第二个至最后一个空间的数累加获得 sub_total。
    那么被修改的数就是 total - sub_total。

    (有溢出危险)

    第2种方法:

    做一个抑或操作,一个数x,x^x=0,x^0=x,所以修改后的第二个空间到最后一个空间所有数抑或一遍,然后再抑或a到a+n-1,相当于(3^3)^(7^7)...(4^4)^5=5^0=5,结果就是被修改的数字。

    第3种方法:

    位图-BitMap法;

    参考:

    http://hi.baidu.com/mianshiti/blog/item/1faff7035c49161a738b650f.html#0

  • 相关阅读:
    Php compiler for .NET framework
    C++ Virtual Inheritance Memory Layout
    MIT公开课汉化
    OpenGL like Vulkan
    C++ Chrono Timer
    VisTools: C++模仿Java体系
    Lua IDE
    PHP调试
    Decoda
    JSRDB
  • 原文地址:https://www.cnblogs.com/dartagnan/p/2196185.html
Copyright © 2011-2022 走看看