簡單起見,假設每個機器儲存乙個標號為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 如果有兩台機器宕機呢?...