程式設計之美 快速找出機器故障問題

2022-09-12 14:33:24 字數 1871 閱讀 2765

題目:

簡化後問題:有很多機器id,其中只有乙個或兩個id被丟失,正常情況下每個id個數為2,請問如何找到丟失的id是幾。

j**a解法一實現:

/*** 使用異或操作 x異或x等於0,x異或0等於x,所有元素異或結果就是丟失的元素

* 如果丟失id個數為2,異或結果就是a異或b的結果,然後將陣列分成兩組,分別找出來。

* @author zhaozh**/

public class machineerrorid1

if(flag)

}this.deleteidindexes = deleteidindexes;

this.lostids = new int[deleteidindexes.length];

}public void findlostmachineids()else

}private int findlostmachineid(int i_result)elseelse if((i_temp & machineids[i]) != 0)

}return i_lostids;}}

private int findlostmachineid()

return i_lostid;

}public void output()}}

public static void main(string args) ;

int deleteidindexes = new int;

machineerrorid1 machineerrorid = new machineerrorid1(machineids, deleteidindexes);

machineerrorid.findlostmachineids();

machineerrorid.output();}}

j**a解法二實現:

/*** 原理:末丟失id前的id總和,減去丟失id後的總和,就是丟失的id。

* 如果丟失一下,就可以直接找出來

* 如果丟失的是兩個,就要再構造乙個方程,如丟失前後,所有id的乘積之差(防止溢位也可以是 所有id的平方和)。由x+y=a,x*y=b求出x,y

* @author zhaozh**/

public class machineerrorid2

if(flag)

}for(int i = 0; i < machineids.length; i++)

if(deleteidindexes.length > 1)

}this.deleteidindexes = deleteidindexes;

this.lostids = new int[deleteidindexes.length];

}public void findlostmachineids()else

}private int multimachineid()

return this.mult_ids / i_multids;

}private int summachineid()

return this.sum_ids - i_lostid;

}public void output()}}

public static void main(string args) ;

int deleteidindexes = new int;

machineerrorid2 machineerrorid = new machineerrorid2(machineids, deleteidindexes);

machineerrorid.findlostmachineids();

machineerrorid.output();}}

輸出結果:

the lost machine id is :

1  5

程式設計之美 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 如果有兩台機器宕機呢?...

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

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