【2013-12-23】《编程之美》读书笔记:快速找出故障机器 [历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2013-12-23 标题《编程之美》读书笔记快速找出故障机器分类编程 / java / 编程之美 标签java·编程之美·快速查找《编程之美》读书笔记快速找出故障机器1.5快速找出故障机器解法三备注最近在学习《 编程之美 》这本书书中提到了很多很经典的算法问题和实现学起来真是耗费脑细胞啊。书中的算法实现使用C编写的这里作者自己写了一部分java的实现如果有错误还请各位读者批评指正。截图版权属于原作者。github【 https://github.com/cstriker1407/think_in_java 】1.5快速找出故障机器解法三publicclassNumSearchTest{/* * 通过异或的方式来快速找到落单的那个数字。 * 数学运算方式异或有如下的几个运算特性 1. a ⊕ a 0 和 a⊕ 0 a 2. a ⊕ b b ⊕ a 3. a ⊕b ⊕ c a ⊕ (b ⊕ c) (a ⊕ b) ⊕ c 4. d a ⊕ b ⊕ c 可以推出 a d ⊕ b ⊕ c 5. a ⊕ b ⊕ a b 通过这些特性可以发现异或遵循交换律当数组中的有一个落单的数时其他的所有数均可两两异或为0剩下的落单数与0异或得到原值 */publicstaticvoidtest(){ListIntegernumListnewLinkedListInteger();for(inti0;i1000;i){numList.add(i);numList.add(i);}intkey666;numList.remove(newInteger(key));intsearchResult0;for(Integeritem:numList){searchResultsearchResult^item;}System.out.println(result:searchResult);}}备注作者只实现了解法3其他解法作者没有使用java实现。通过代码可以发现熟练使用运算符加减乘除 同或异或 左右移可以在特定需求下写出非常漂亮的代码。看来数学还是得好好学习啊~~