本文準(zhǔn)備講解1個(gè)簡(jiǎn)單的算法編程問題柠辞, 這個(gè)算法編程問題來自LintCode平臺(tái)缩宜。不了解.LintCode平臺(tái)的讀者可以閱讀筆者文章(在線編程平臺(tái)推薦-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
單次出現(xiàn)的數(shù)
給出2*n + 2個(gè)數(shù)字安皱,除其中兩個(gè)數(shù)字之外其他每個(gè)數(shù)字均出現(xiàn)兩次,找到這兩個(gè)數(shù)字认然。
樣例
給出[1,2,2,3,4,4,5,3]补憾,返回 1和5
該問題的標(biāo)準(zhǔn)算法需要用到位處理方案,對(duì)任何數(shù)字A而言 A 位異或 A? 會(huì)將得到 0【碓保現(xiàn)在公布1種不做位處理的算法方案盈匾。這種非位處理方案的缺點(diǎn)是速度較慢,閱讀非位處理方案比較容易毕骡。好像用高級(jí)語言和機(jī)器語言做同樣1個(gè)任務(wù)削饵,高級(jí)語言有高級(jí)語言的優(yōu)點(diǎn),機(jī)器語言有機(jī)器語言的長(zhǎng)處未巫。
非位處理的算法