本文准备讲解1个简单的算法编程问题, 这个算法编程问题来自LintCode平台。不了解.LintCode平台的读者可以阅读笔者文章(在线编程平台推荐-LeetCode)。问题的英文版本描述如下:
Single Number III
Given 2*n + 2 numbers, every number occurs twice except two, find them.
Example
Given [1,2,2,3,4,4,5,3] return 1 and 5
单次出现的数
给出2*n + 2个数字,除其中两个数字之外其他每个数字均出现两次,找到这两个数字。
样例
给出[1,2,2,3,4,4,5,3],返回 1和5
该问题的标准算法需要用到位处理方案,对任何数字A而言 A 位异或 A 会将得到 0。现在公布1种不做位处理的算法方案。这种非位处理方案的缺点是速度较慢,阅读非位处理方案比较容易。好像用高级语言和机器语言做同样1个任务,高级语言有高级语言的优点,机器语言有机器语言的长处。