快速找出故障機器(single number)

2022-05-01 02:48:07 字數 798 閱讀 9707

簡單起見,假設每個機器儲存乙個標號為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 ;

int res=0;

for(int i=0; i<32; i++)

res|=(bitnum[i]%3)<}return res;}};

1 5快速找出故障機器

關心資料探勘和搜尋引擎的程式設計師都知道,我們需要很多的計算機來儲存和處理海量資料。然而,計算機難免出現硬體故障而導致網路聯絡失敗或宕機。為了保證搜尋引擎的服務質量,我們需要保證每份資料都有多個備份。簡單起見,假設每個機器儲存乙個標號為id的記錄 id是小於十億的整數 假設每份資料都儲存兩個備份,這...

程式設計之美 1 5 快速找出故障機器

解法3 使用異或 問題1 找出出現奇數次的兩個數 void findrepeatedtwonumbers int a,int n,int no1,int no2 temp的值現為兩個出現奇數次的數的異或 找第乙個為1的位 for j 0 j sizeof int 8 j 第j位為1,說明這兩個數字在...

程式設計之美 1 5 快速找出故障機器

題目 假設乙個機器只儲存乙個標號為id的記錄,假設每份資料儲存2個備份,這樣就有2個機器儲存了相同的資料。其中id是小於10億的整數 問題1 在某個時間,如果得到乙個資料檔案id的列表。是否能夠快速的找到這個表中僅出現一次的id?即快速找出出現故障的機器儲存的資料id。問題2 如果有兩台機器宕機呢?...