zoukankan      html  css  js  c++  java
  • 快速找出故障机器(single number)

    简单起见,假设每个机器存储一个标号为ID的记录(ID是小于十亿的整数),假设每份数据都保存两个备份,这样就有两个机器储存了同样的数据。

    1.在某个时间,如果得到一个数据文件ID的列表,是否能够快速地找出这个表中仅出现一次的ID?

    2.如果已经知道只有一台机器死机(也就是说只有一个备份丢失)呢?如果有两台机器死机呢(假设同一个数据的两个备份不会同时丢失)?

    对应的是leetcode的Single Number,找出唯一一个出现一次的数字(其他数出现两次)

    思想:异或思想,异或之后得到的结果就是单独一个的那个数字!

    拓展:有两个数字只出现一次,其他数字出现两次,找出这两个数字?

    思想:异或所有数字,得到的结果是只出现一次的那两个数异或的结果。。利用此结果分段:

    a^b的结果是:可以通过第一个位是1,来进行分段(由于a,b不同,所以异或的结果,必然至少出现有一位是1)

    通过此位进行分段:得到两类,然后进行异或,得到的两个数就是single number 

    编程之美(p39),剑指offer(40题)

    拓展:single numberII

    思想:利用位运算,此bit的1相加mod3,得到结果就是single number

    class Solution {
    public:
    int singleNumber(int A[], int n) {
    int bitnum[32]={0};
    int res=0;
    for(int i=0; i<32; i++){
    for(int j=0; j<n; j++){
    bitnum[i]+=(A[j]>>i)&1;
    }
    res|=(bitnum[i]%3)<<i;
    }
    return res;
    }
    };

  • 相关阅读:
    事件对象
    type of 操作符和instanceof操作符的区别以及使用方法
    JS:XML
    JS:事件处理程序
    JS:event对象下的target属性和取消冒泡事件
    JS:callee属性
    JS:call()和apply的区别
    JS:事件对象1
    DOM元素的大小和位置
    CSS:在IE浏览器下,元素下沉一行的解决办法
  • 原文地址:https://www.cnblogs.com/kkshaq/p/4421956.html
Copyright © 2011-2022 走看看