題目:
簡化後問題:有很多機器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 如果有兩台機...